PHP - 关闭浏览器后会话销毁

Shr*_*hri 11 php cookies session

虽然这个问题有多个重复,但我找不到合适的解决方案.需要一些帮助.

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();
Run Code Online (Sandbox Code Playgroud)

Adi*_*asi 8

这可能对你有帮助

session_set_cookie_params(0);
session_start();
Run Code Online (Sandbox Code Playgroud)

您的会话 cookie 将被销毁...因此您的会话将一直有效,直到浏览器打开。请查看http://www.php.net//manual/en/function.session-set-cookie-params.php这可能对您有所帮助。


小智 6

关闭会话的最佳方法是:如果在特定时间间隔后该会话没有响应.然后关闭 请看这篇文章,我希望它能解决这个问题." 如何在PHP中更改会话超时? "


col*_*ton 6

使用保持活着.

登录时:

session_start();
$_SESSION['last_action'] = time();
Run Code Online (Sandbox Code Playgroud)

每隔几(例如20)秒调用一次ajax:

windows.setInterval(keepAliveCall, 20000);
Run Code Online (Sandbox Code Playgroud)

服务器端keepalive.php:

session_start();
$_SESSION['last_action'] = time();
Run Code Online (Sandbox Code Playgroud)

在其他每一个动作上:

session_start();
if ($_SESSION['last_action'] < time() - 30 /* be a little tolerant here */) {
  // destroy the session and quit
}
Run Code Online (Sandbox Code Playgroud)


kpp*_*kpp 5

有不同的方法可以做到这一点,但是服务器无法检测到浏览器何时关闭,因此很难破坏它。

  • 超时会话。

使用当前时间创建新会话或向当前会话添加时间变量。然后在启动或执行操作时检查它以查看是否必须删除会话。

session_start();
$_SESSION["timeout"] = time();
//if 100 seconds have passed since creating session delete it.
if(time() - $_SESSION["timeout"] > 100){ 
    unset($_SESSION["timeout"];
}
Run Code Online (Sandbox Code Playgroud)
  • 阿贾克斯

使 javascript 执行一个将删除会话的 ajax 调用,并使用onbeforeunload()一个 javascript 函数在用户离开页面时调用最终操作。出于某种原因,这并不总是有效。

  • 在启动时删除它。

如果您总是希望用户在页面关闭后在启动时看到登录页面,您可以在启动时删除会话。

<? php
session_start();
unset($_SESSION["session"]);
Run Code Online (Sandbox Code Playgroud)

可能还有更多。