我使用session_start()
在PHP中启动会话,但是当我的浏览器关闭时,会话就消失了。
如何使用PHP创建持续浏览器关闭的持久会话?
答案 0 :(得分:55)
请参阅php.ini
值session.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);
亲自尝试