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

2022-08-30 14:31:39

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

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


答案 1

请参阅值session.cookie_lifetimephp.ini

在浏览器关闭时结束会话的平均值 means。0

在使用ini_set启动会话之前,可以直接在应用程序中重写此值,也可以在应用程序中设置此值。将其设置为大于的值将导致会话在该持续时间内有效。php.ini0

例如:

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

上面的示例导致会话 Cookie 设置为从会话启动时起的 7 天过期。

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

另请注意:如果您的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();

答案 2

会话的设计使得它们基于“会话”。换句话说,如果您关闭浏览器(本质上是您的会话),它应该会消失。

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


推荐