繁体   English   中英

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

[英]How do I create persistent sessions in PHP?

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

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

请参阅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();

您可以在不输入session_start()情况下启动会话,并且可以使用cookie来启动它

setcookie('PHPSESSID','any id' , any time);

之所以可以这样做,是因为当您键入session_start()然后尝试像这样查找Cookie时

print_r($_COOKIE);

那么支出将是:

Array ( [PHPSESSID] => c0voj7h0b4aesddkc17a6jk7c3 )

自己尝试

会话被设计为基于“会话”。 换句话说,如果您关闭浏览器(本质上是您的会话),那应该就消失了。

您可以尝试将会话数据存储在数据库中而不是文件中。 将会话ID和会话数据存储在表中。 然后从cookie PHPSESSID(默认)中调用会话ID,并从数据库中查找会话数据。

如果您想要一个持久会话,我建议使用cookie和数据库。 我们将客户的ID(随机的32位字母数字值)存储在cookie中,然后引用该ID加载其客户信息。

我看不到保持长期持续会话的意义,因为浏览器会自动保存用户密码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM