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

时间:2012-03-21 02:40:20

标签: session-cookies php

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

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

4 个答案:

答案 0 :(得分:55)

请参阅php.inisession.cookie_lifetime

默认值0表示在浏览器关闭时结束会话。

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

E.g。

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();

答案 1 :(得分:2)

会话的设计使其成为"会话"根据。换句话说,如果你关闭浏览器(基本上是你的会话),它就会消失。

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

您可以在不输入Set ws = wb.Sheets("data") With ws lastcolumn = .Cells(1, .Columns.Count).End(xlToLeft).Column lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row Set range_to_copy = .Range(.Cells(1, 1), .Cells(lastrow, lastcolumn)) End With 的情况下开始会话,并且可以像这样使用cookie启动它

session_start()

可以这样做,因为当您键入setcookie('PHPSESSID','any id' , any time); 然后尝试像这样查找Cookie时

session_start()

然后输出将是:

print_r($_COOKIE);

亲自尝试