一尘不染

如何在PHP中创建持久会话?

php

我曾经用session_start()PHP启动会话,但是当我的浏览器关闭时,该会话消失了。

如何使用PHP创建持续持续浏览器关闭的持久会话?


阅读 263

收藏
2020-05-29

共1个答案

一尘不染

请参阅php.inisession.cookie_lifetime

默认值0意味着在浏览器关闭时结束会话。

您可以php.ini使用ini_set在开始会话之前直接在应用程序中覆盖此值或在应用程序中设置它。将其设置为大于此值0将导致会话在该持续时间内存活。

例如

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7);  // 7 day cookie lifetime
session_start();

上面的示例使会话cookie的设置从会话开始起的7天到期。

注意:
如果您从同一段代码开始所有网页的会话,则每次session_start()调用该会话都不会继续延长会话的有效期。cookie生存期是从第一次启动会话时开始设置的,而不是在后续请求时开始设置。如果要将会话的生存期从当前时间延长7天,请参见session_regenerate_id()

另请注意:
如果您将session.gc_maxlifetime值设置为小于会话cookie长度的值,则可能会出现以下情况:用户5天未访问该站点,并且当他们返回时,会话cookie不再有效因为服务器上的数据已被删除。为了解决这个问题,您还应该将此会话数据的生存期设置为至少与cookie生存期一样长。如手册所述,可能需要对自定义session.save_path会话数据使用自定义项的时间长于默认值。因此,您的脚本可能如下所示:

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7);
ini_set('session.gc_maxlifetime', 60 * 60 * 24 * 7);
ini_set('session.save_path', '/home/yoursite/sessions');
session_start();
2020-05-29