it-swarm.com.ru

PHP - уничтожить сессию после закрытия журнала

Хотя у этого вопроса есть несколько дубликатов, я не смог найти правильное решение для меня . Нужна помощь.

Я использовал ini_set('session.cookie_lifetime', 0); в моем файле конфигурации.

Но это не помогает мне уничтожить сессию при закрытии браузера. 

Текущий поток приложения:

1) На странице аутентификации, если пользователь действителен, сгенерируйте новый идентификатор сеанса, используя session_regenerate_id(true);

2) Управление переходит в 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();
9
Shri

Лучший способ - закрыть сеанс: если по истечении определенного промежутка времени ответа на этот сеанс нет. потом закрой. Пожалуйста, смотрите этот пост, и я надеюсь, что это решит проблему. " Как изменить время ожидания сеанса в PHP? "

6
Ankit

Используйте сохранить в живых.

На входе:

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
}
6
colburton

Есть разные способы сделать это, но сервер не может определить, когда браузер закрывается, поэтому уничтожить его сложно.

  • тайм-аут сессии.

Либо создайте новый сеанс с текущим временем, либо добавьте переменную времени к текущему сеансу. а затем проверьте его при запуске или выполнении действия, чтобы увидеть, нужно ли удалять сеанс.

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"]);

и, вероятно, есть еще.

4
kpp

Это может помочь вам,

session_set_cookie_params(0);
session_start();

Ваш файл cookie сеанса будет уничтожен ... поэтому ваш сеанс будет работать до тех пор, пока браузер не будет открыт. пожалуйста, просмотрите http://www.php.net//manual/en/function.session-set-cookie-params.php это может вам помочь.

2
Adil Abbasi

Есть еще один «взлом» с использованием HTTP Referer (мы предполагаем, что окно браузера было закрыто, текущее доменное имя реферера и доменное имя текущей страницы не совпадают):

session_start();
$_SESSION['somevariable'] = 'somevalue';

if(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_Host) != $_SERVER["SERVER_NAME"]){
    session_destroy();
}

Это также имеет некоторые недостатки, но это помогло мне несколько раз.

1
DTT

Вы можете сделать это с помощью JavaScript, инициировав ajax-запрос к серверу, чтобы уничтожить сеанс по событию onbeforeunload, которое запускается, когда мы закрываем вкладку обзора, окно или браузер.

1
itzmukeshy7

Используйте следующий код для уничтожения сеанса: 

 <?php
    session_start();
    unset($_SESSION['sessionvariable']);
    header("Location:index.php");
    ?>
0
user3774008