Php 当用户关闭浏览器后,我是否可以使会话处于活动状态?

Php 当用户关闭浏览器后,我是否可以使会话处于活动状态?,php,session,Php,Session,我正在尝试实现一个系统,让用户登录一段时间。我可以使用cookies并将其存储到数据库中,然后识别他 但最近我听说,即使用户关闭浏览器并打开新窗口,会话也可以处于活动状态。我的意思是,在再次(甚至多次)关闭/打开浏览器后,会话是否仍然可用 在下面的脚本中,我可以使用$\u会话[“LoginValidation”]多长时间(最多) <?php session_start(); $_SESSION["LoginValidation"] = ture; 方法1)会话。cookie生存期:这是

我正在尝试实现一个系统,让用户登录一段时间。我可以使用cookies并将其存储到数据库中,然后识别他

但最近我听说,即使用户关闭浏览器并打开新窗口,会话也可以处于活动状态。我的意思是,在再次(甚至多次)关闭/打开浏览器后,会话是否仍然可用


在下面的脚本中,我可以使用
$\u会话[“LoginValidation”]
多长时间(最多)

<?php
session_start();
$_SESSION["LoginValidation"] = ture;
方法1)
会话。cookie生存期
:这是cookie的生存期,默认为0,这意味着浏览器关闭时cookie将被销毁。通过增加此变量,可以设置更长的生存期。 它与服务器时间有关,因此您需要考虑客户机和服务器的时间差异。 还有
session.gc maxlifetime
,这是会话数据在存储中被视为垃圾并被销毁的时间

虽然您可以将这些设置设置为相对较高的值并使其正常工作,我建议不要这样做,因为这会在会话存储中留下大量不必要的会话数据,因为GC不会收集实际的死会话

或 另一种方法是,即使在关闭浏览器后,会话也要激活。将会话保存在db中并获取其id,然后通过在用户cookie中设置该id

setcookie("name","value",time()+$int);
因此,您可以从
$\u COOKIE[“name”]获取该值使用它从数据库中获取会话变量

方法1)
会话。cookie生存期
:这是cookie的生存期,默认为0,这意味着浏览器关闭时cookie被销毁。通过增加此变量,可以设置更长的生存期。 它与服务器时间有关,因此您需要考虑客户机和服务器的时间差异。 还有
session.gc maxlifetime
,这是会话数据在存储中被视为垃圾并被销毁的时间

虽然您可以将这些设置设置为相对较高的值并使其正常工作,我建议不要这样做,因为这会在会话存储中留下大量不必要的会话数据,因为GC不会收集实际的死会话

或 另一种方法是,即使在关闭浏览器后,会话也要激活。将会话保存在db中并获取其id,然后通过在用户cookie中设置该id

setcookie("name","value",time()+$int);

因此,您可以从
$\u COOKIE[“name”]获取该值使用它从数据库中获取会话变量

,以便在关闭浏览器后保持会话。您需要设置会话cookie的过期时间。没有到期时间的cookie在浏览器关闭时被删除,通常称为会话cookie(与PHP会话不同,只是相关)

(旁注:如果您的浏览器配置为在退出时“保存打开的选项卡”,则会话cookie可能会被浏览器保存,即使它们应该被删除)

所以你可以设置一个大的值。但这并不能阻止服务器上存储的会话数据被删除——为了让数据保留更长时间,您需要为其增加值

但这是解决问题的错误方法

实现这种持久会话会带来安全性和容量方面的影响—您当然不应该将其作为默认行为来实现—只有在用户明确表示同意的情况下


使用“记住我”cookie作为一种轻量级会话系统是最佳实践解决方案。给它一个随机值(建议您使用一个合理可靠的随机数源,例如
base64\u encode(openssl\u random\u pseudo\u bytes(64))
和一个与其他cookie不冲突的名称,并将其与您真正希望在实际会话中保留的数据一起存储(例如经过身份验证的用户名).

为了在关闭浏览器后保持会话,您需要为会话cookie设置过期时间。关闭浏览器时,将删除没有过期时间的cookie,通常称为会话cookie(与PHP会话不同-只是相关)

(旁注:如果您的浏览器配置为在退出时“保存打开的选项卡”,则会话cookie可能会被浏览器保存,即使它们应该被删除)

因此,您可以只设置一个较大的值,但这并不能阻止服务器上存储的会话数据被删除—要使数据保留更长时间,您需要将该值设置为

但这是解决问题的错误方法

实现这种持久会话会带来安全性和容量方面的影响—您当然不应该将其作为默认行为来实现—只有在用户明确表示同意的情况下


使用“记住我”cookie作为一种轻量级会话系统是最佳实践解决方案。给它一个随机值(建议您使用合理可靠的随机数源,例如
base64_编码(openssl_random_pseudo_bytes(64))
和一个与其他cookie不冲突的名称,并将其与您真正希望在实际会话中保留的数据一起存储(例如,经过身份验证的用户名).

无法回答。每个php都可以配置会话生存期。默认情况下,会话生存期仅适用于浏览器会话,但您可以设置任何到期日。但即使会话文件仍然存在于服务器上,客户端浏览器中的会话COOKIE也可能早就消失了。例如,您将有一个孤立的会话文件。可能是@MarcB的重复“但是您可以设置任何您想要的过期时间”。!这样即使用户关闭浏览器,我也可以在服务器上保持会话的活动状态。对吗?是的。cookie可以在