关闭浏览器后保持PHP会话

时间:2012-03-27 18:16:07

标签: php asp.net session cookies session-timeout

这个故事的背景......

我的网站上有一个ASP.NET登录应用程序,登录后,我可以在保持会话的同时导航到WordPress(PHP)端(仍然在同一个域中)。请参阅下面的我的贴心链接,了解其工作原理。

然而,如果我关闭浏览器会出现问题,然后尽管保持ASP.NET会话,我仍然会丢失PHP'会话'。所以我在PHP方面“注销”但仍然在.NET端“登录”。

- 有没有办法,使用我现有的代码,为会话/ cookie设置生命周期,以避免会话/ cookie在我关闭浏览器时消失? -

我已经从模板的 <head> 这里找到了我当前的PHP代码:http://pastie.org/private/ndcqgbog34uqld1etozda,它会检查并保留会话。

我确实看过this example on PHP.net,但对如何在我的解决方案中使用它感到困惑。

非常感谢您对此的任何指示。

3 个答案:

答案 0 :(得分:1)

认为你应该使用setcookie()一个到期时间(见here)。你只是在会话中设置内容(从cookie中复制,看起来像,但我不确定它们的生命周期是什么)。

而不是这一行:

$_SESSION[DOT_NET_SESSION][ $tuple['SessionName'] ] =
    $tuple['SessionValue'];

试试这个:

$cookie = array($tuple['SessionName'] => $tuple['SessionValue']);
setcookie(DOT_NET_SESSION, $cookie, time() + 60 * 60 * 24);

我认为应该为一天设置一个cookie。

答案 1 :(得分:1)

您需要做两件事。

  1. Set the cookie lifetime(默认为0,PHP互为“直到浏览器关闭”)
  2. Configure the session garbage collection lifetime。这决定了服务器端会话数据被销毁之前的时间。
  3. 但我建议你不要这样做。从安全角度来看,持续超过浏览器会话生命周期(在浏览器关闭时结束)的会话存在问题

答案 2 :(得分:0)

您必须将一些数据存储在用户浏览器的cookie中。然后,如果用户回到您的bage,您将执行代码的验证块。

查看完整解决方案How to do auto login, store the session in the browser