Ответ 1
Лучше всего закрыть сеанс: если нет ответа на этот сеанс после определенного интервала времени. затем закрыть. Пожалуйста, см. Этот пост, и я надеюсь, что он решит проблему. "Как изменить тайм-аут сеанса в PHP?
Хотя этот вопрос имеет несколько дубликатов, я не мог найти подходящего решения для меня. Нужна помощь.
Я использовал ini_set('session.cookie_lifetime', 0);
в моем файле конфигурации.
Но это не помогает мне уничтожать сеанс в браузере.
Текучий ток приложения:
1) На странице аутентификации, если пользователь действителен, сгенерируйте новый идентификатор сеанса, используя session_regenerate_id(true);
2) Control переходит на welcome.php, где я начинаю новый сеанс, используя session_start();
3) в коде страницы выхода
$_SESSION = array();
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// Finally, destroy the session.
session_destroy();
Лучше всего закрыть сеанс: если нет ответа на этот сеанс после определенного интервала времени. затем закрыть. Пожалуйста, см. Этот пост, и я надеюсь, что он решит проблему. "Как изменить тайм-аут сеанса в PHP?
Используйте keep keep.
При входе в систему:
session_start();
$_SESSION['last_action'] = time();
Один вызов ajax каждые несколько (например, 20) секунд:
windows.setInterval(keepAliveCall, 20000);
Серверная сторона keepalive.php:
session_start();
$_SESSION['last_action'] = time();
При каждом другом действии:
session_start();
if ($_SESSION['last_action'] < time() - 30 /* be a little tolerant here */) {
// destroy the session and quit
}
Существуют разные способы сделать это, но сервер не может обнаружить, когда браузер закрывается, поэтому его уничтожить трудно.
Создайте новый сеанс с текущим временем или добавьте временную переменную в текущий сеанс. а затем проверьте его при запуске или выполните действие, чтобы увидеть, должен ли сеанс быть удален.
session_start();
$_SESSION["timeout"] = time();
//if 100 seconds have passed since creating session delete it.
if(time() - $_SESSION["timeout"] > 100){
unset($_SESSION["timeout"];
}
Сделайте javascript выполнить вызов ajax, который удалит сеанс, с помощью onbeforeunload()
функции javascript, которая вызывает окончательное действие, когда пользователь покидает страницу. По какой-то причине это не всегда работает.
Если вы всегда хотите, чтобы пользователь просматривал страницу входа при запуске после закрытия страницы, вы можете просто удалить сеанс при запуске.
<? php
session_start();
unset($_SESSION["session"]);
и, возможно, есть еще несколько.
Это может помочь вам,
session_set_cookie_params(0);
session_start();
Ваш cookie сеанса будет уничтожен... так что ваш сеанс будет хорошим, пока браузер не будет открыт. пожалуйста, просмотрите http://www.php.net//manual/en/function.session-set-cookie-params.php, это может вам помочь.
Вы можете сделать это с помощью JavaScript, инициировав запрос ajax на сервер, чтобы уничтожить сеанс в событии onbeforeunload, когда мы закрываем вкладку просмотра или окно или браузер.
Там есть еще один "взломать" с помощью HTTP Referer (мы предполагаем, что окно браузера закрыто, текущее имя домена референта и доменное имя доменного имени не совпадают):
session_start();
$_SESSION['somevariable'] = 'somevalue';
if(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_HOST) != $_SERVER["SERVER_NAME"]){
session_destroy();
}
У этого также есть некоторые недостатки, но это помогло мне несколько раз.
Используйте следующий код для уничтожения сеанса:
<?php
session_start();
unset($_SESSION['sessionvariable']);
header("Location:index.php");
?>
Если вы хотите изменить идентификатор сеанса при каждом входе в систему, обязательно используйте session_regenerate_id (true) во время входа в систему.
<?php
session_start();
session_regenerate_id(true);
?>
Если вы смущены, что делать, просто обратитесь к руководству функции session_destroy():
http://php.net/manual/en/function.session-destroy.php
Здесь вы можете найти еще несколько функций session_destroy().