2013-02-07 144 views
0

我想有会话而存在关闭浏览器中 所以我用PHP会话和饼干

session_set_cookie_params(86400 * 60, '/', 'my.domain.com', true, true); 

一个永久性的Cookie发送给客户端(也与安全标志,因为这是一个SSL网站) 其中有效期为2个月。 但是,我看到在闲置x分钟后,会话变量在服务器上被清除。 我该如何避免这种情况?从本质上讲,我希望存储会话变量,直到饼干 变为无效

感谢

+0

“我想让会话持续浏览器关闭” - 实际上,这是您想到的实现。你究竟在做什么?如果您希望让用户保持登录状态,即“记住我”类型的功能,那么最好使用(加密的)身份验证详细信息存储单独的持久性cookie,然后在新会话中重新应用它们。会话并不意味着持久性,这就是为什么非持久性cookie也称为会话cookie的原因。 – leftclickben

+0

嗨,实际上我正在寻找的功能是记住我 – Thomas

回答

0

Session变量将继续存在如下评论,但除非你改变它们的默认行为,过期会话结束时(即当浏览器关闭)。

对于您要完成的任务,您应该将值存储在$_COOKIE变量中,而不是$_SESSION变量。

看到这篇文章:http://buildinternet.com/2010/07/when-to-use-_session-vs-_cookie/

+1

只要PHPSESSID cookie是持久的(并且会话在访问之间未被GCed),会话变量就会工作。 PHP实际上并不知道浏览器何时关闭;如果浏览器的另一个实例出现并将其传递给同一个cookie,则不会更聪明。 – cHao

+0

对,但对于用户想要完成的事情,我不相信这种方法是理想的,因为他希望他们坚持下去。 – adamdehaven

+0

@AdamD我同意 - 这听起来像是一个更好的常规饼干用例。将会话留给他们的意图 - 一次浏览会话。 –

1

设置session.gc_maxlifetime configuration property

当涉及到可接受的值时,文档相当稀少,但我不想去两个月。

通常情况下,将重要数据存储在数据库中并将其添加到会话时,如果使用创建一个会话,请记住我的Cookie为

为实际会话留下会话。

1

随着会议你正在看两件事情。直到垃圾收集清除服务器上的会话的时间以及直到cookie过期的时间。

您只更改了cookie过期时间,会话仍会清理干净。然而,延长会议并不是解决这个问题的好方法。您的代码可能会发生变化,最终可能会导致用户中断会话。您可能需要使用某种类似于memcached的共享会话存储,这会在某个最长时间后删除存储。

所以解决这个问题的方法是生成一个唯一的一次性Cookie,可以用作替代登录密钥。该密钥将允许用户登录类似于用户名/密码。一旦它被使用,一个新的被重新生成。

+0

非常好的方法。我会考虑这个 – Thomas