Подтвердить что ты не робот

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();
4b9b3361

Ответ 1

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

Ответ 2

Используйте 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
}

Ответ 3

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

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

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

session_start();
$_SESSION["timeout"] = time();
//if 100 seconds have passed since creating session delete it.
if(time() - $_SESSION["timeout"] > 100){ 
    unset($_SESSION["timeout"];
}
  • Ajax

Сделайте javascript выполнить вызов ajax, который удалит сеанс, с помощью onbeforeunload() функции javascript, которая вызывает окончательное действие, когда пользователь покидает страницу. По какой-то причине это не всегда работает.

  • удалите его при запуске.

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

<? php
session_start();
unset($_SESSION["session"]);

и, возможно, есть еще несколько.

Ответ 4

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

session_set_cookie_params(0);
session_start();

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

Ответ 5

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

Ответ 6

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

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

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

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

Ответ 7

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

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

Ответ 8

Если вы хотите изменить идентификатор сеанса при каждом входе в систему, обязательно используйте session_regenerate_id (true) во время входа в систему.

<?php
session_start();
session_regenerate_id(true);
?> 

Ответ 9

Если вы смущены, что делать, просто обратитесь к руководству функции session_destroy():

http://php.net/manual/en/function.session-destroy.php

Здесь вы можете найти еще несколько функций session_destroy().