【问题标题】:How do I alter this code so that the session is *unset* upon browser close?如何更改此代码,以便在浏览器关闭时会话 *unset*?
【发布时间】:2013-11-13 04:40:12
【问题描述】:

这是一些非常简单的会话代码

ini_set('session.cookie_lifetime', 0);
session_start();
echo session_id();

var_dump($_SESSION);

$_SESSION["name"]  = "test";

我加载了一次页面。

然后我注释掉

#$_SESSION["name"]  = "test";

我点击重新加载并且可以 $_SESSION 变量。

如果我完全关闭浏览器并启动它,我希望 $_SESSION 变量完全为空。

相反,我看到“名称”仍然是 $_SESSION 变量的一部分。

请更改此代码,以便在我关闭浏览器时清空 $_SESSION。当我再次打开它时,$_SESSION 变量应该是空的。

【问题讨论】:

  • 你可以做的是使用 session_unset();和 session_destroy();在您网站的第一个登录页面(即 index.php)上,这将破坏任何先前的会话,然后您可以立即使用 session_start() 跟随该代码;开始一个新会话...唯一的问题是,每次刷新 index.php 时,会话变量都会被重置。
  • 查看这篇文章以了解在 XX 分钟后使会话数据过期的方法:stackoverflow.com/questions/520237/… 没有可靠的方法来做你想做的事(在浏览器关闭时),除非你想浪费宝贵的资源轮询服务器每隔几秒

标签: php session session-cookies


【解决方案1】:

不可能。 PHP 根据浏览器中设置的 cookie 跟踪会话,因此如果您的浏览器在不同的启动过程中保留 cookie,那么您的 PHP 会话也将继续。您可以将会话到期时间设置得更低,但这适用于所有个会话。

PHP 完全不知道您的浏览器是否在两次请求之间关闭。

【讨论】:

  • 但是如果我们不在 cookie 中添加过期日期,那么当浏览器关闭时它是否过期?所以问题是 - 有没有办法删除会话 cookie 中的 cookie 到期日期?这就是我的想法。
  • 这就是 PHP 关于会话 cookie 的说法:'session.cookie_lifetime 以秒为单位指定发送到浏览器的 cookie 的生命周期。值 0 表示“直到浏览器关闭”。默认为 0。既然我设置了那个参数,为什么浏览器关闭时cookie不会被删除?
猜你喜欢
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
相关资源
最近更新 更多