Хотя этот вопрос имеет несколько дубликатов, я не мог найти подходящего решения для меня. Нужна помощь.
Я использовал 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"]; }
сsession_start(); $_SESSION["timeout"] = time(); //if 100 seconds have passed since creating session delete it. if(time() - $_SESSION["timeout"] > 100){ unset($_SESSION["timeout"]; }
-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, когда мы закрываем вкладку обзора или окно или браузер.
Для уничтожения сеанса используйте следующий код:
<?php session_start(); unset($_SESSION['sessionvariable']); header("Location:index.php"); ?>
с<?php session_start(); unset($_SESSION['sessionvariable']); header("Location:index.php"); ?>
Есть еще один «хак» с помощью HTTP Referer (мы предполагаем, что окно браузера закрыто, имя домена текущего реферала и доменное имя текущей страницы не совпадают):
session_start(); $_SESSION['somevariable'] = 'somevalue'; if(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_HOST) != $_SERVER["SERVER_NAME"]){ session_destroy(); }
Это также имеет некоторые недостатки, но это помогло мне несколько раз.
Если вы смущены, что делать, просто обратитесь к руководству функции session_destroy () :
http://php.net/manual/en/function.session-destroy.php
Там вы можете найти еще несколько функций session_destroy ().