0

好的,所以我知道服务器上持续的默认时间会话变量是 1440 秒或 24 分钟。那么如果变量像垃圾一样消失,那么它们的目的是什么?这是否意味着我的用户每 24 分钟就会因为会话变量更新而退出?将 session.gc_maxlifetime 更改为 2 周对我来说是否明智,以便用户可以保持登录状态两周?这一切都非常令人困惑,所以我会提前感谢任何帮助!

4

4 回答 4

6

您错过了会议的重点。会话通常持续到用户关闭浏览器(这是浏览器默认删除会话 cookie 的时间点)。将会话保持打开 2 周意味着如果用户忘记注销,其他人可能会打开页面并登录。

会话在用户与页面的最后一次交互后 24 分钟(或任何设置)后仍处于活动状态。如果您使用 ajax,则 ajax 调用本身将扩展会话,因此在浏览器中打开页面时用户不会被注销。

“记住我”或“让我保持登录”功能是完全不同的,它通常会设置另一个带有一些令牌的 cookie(可能在 2 周内过期)并自动登录用户并开始一个新会话。好吧,您实际上可以将会话保留在数据库中并恢复相同的会话。

请记住,会话依赖于用户浏览器中的 cookie,而此 cookie 通常是短暂的。

于 2013-07-06T19:17:45.607 回答
1

这显然不是那么令人困惑,因为您是对的:会话在该时间后(或当用户关闭浏览器时)过期,并且更改该设置将影响服务器上会话存储的生命周期。当然,每次用户访问页面时,时间再次设置为 24 分钟。

但是,如果您真的想要长期存储,请使用数据库或 cookie。您真的不应该为此使用会话,因为它们只是会话(在英语中,这意味着一次访问该站点,因此直到用户关闭您的站点)。

于 2013-07-06T19:17:10.650 回答
0

试试这个,这是数据库中的简单存储会话http://brennydoogles.wordpress.com/2011/09/06/taking-control-of-your-php-sessions-using-database-sessions/

于 2013-07-06T20:28:06.487 回答
0

您可以为会话变量设置超时,但这会给您的应用程序带来不必要的问题。仍然如果你想设置超时:

要在会话上设置一分钟超时,您可以像这样调用上述函数:

session_start_timeout(60);
于 2019-09-25T18:11:11.633 回答