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

Joh*_*man 28 php session-cookies

我曾经session_start()在PHP中启动会话,但是当我的浏览器关闭时,会话就消失了.

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

dre*_*010 56

查看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();
Run Code Online (Sandbox Code Playgroud)

上面的示例导致会话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();
Run Code Online (Sandbox Code Playgroud)