Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php会话和cookie_Php_Session_Cookies - Fatal编程技术网

php会话和cookie

php会话和cookie,php,session,cookies,Php,Session,Cookies,我想在浏览器关闭时保持会话 所以我用 session_set_cookie_params(86400 * 60, '/', 'my.domain.com', true, true); 将持久cookie发送到客户端(由于这是一个SSL站点,因此还带有安全标志) 有效期为2个月。 但是,我看到在x分钟的不活动之后,服务器上的会话变量被清除。 我怎样才能避免呢?本质上,我希望会话变量存储到cookie 无效 谢谢会话变量将如下面所述保持不变,但除非您更改其默认行为,否则它们将在会话结束时过期(即浏

我想在浏览器关闭时保持会话 所以我用

session_set_cookie_params(86400 * 60, '/', 'my.domain.com', true, true);
将持久cookie发送到客户端(由于这是一个SSL站点,因此还带有安全标志) 有效期为2个月。 但是,我看到在x分钟的不活动之后,服务器上的会话变量被清除。 我怎样才能避免呢?本质上,我希望会话变量存储到cookie 无效


谢谢

会话变量将如下面所述保持不变,但除非您更改其默认行为,否则它们将在会话结束时过期(即浏览器关闭时)

对于您试图实现的目标,您应该将您的值存储在
$\u COOKIE
变量中,而不是
$\u SESSION
变量中

请参阅本文:

设置

当涉及到可接受的值时,文档是相当稀疏的,但我不想高达两个月

通常,最好将重要数据存储在数据库中,并在使用“记住我”cookie创建会话时将其添加到会话中


将会话留给实际会话。

对于会话,您将看到两件事。垃圾回收清除服务器上会话的时间,以及cookie过期的时间

您只更改了cookie过期时间,会话仍将被清理。然而,延长会议时间并不是解决这个问题的好办法。您的代码可能会更改,最终用户的会话可能会中断。您可能需要使用某种共享会话存储,如memcached,它将在某个最长时间后删除存储


因此,解决这个问题的方法是生成一个唯一的一次性cookie,它可以用作替代登录密钥。此密钥将允许用户以类似用户名/密码的方式登录。一旦使用它,就会重新生成一个新的会话。

只要PHPSESSID cookie是持久的(并且会话在访问之间没有被GCed),会话变量就可以工作。PHP实际上不知道浏览器何时关闭;如果浏览器的另一个实例出现并递给它相同的cookie,这一点都不明智。是的,但对于用户试图实现的目标,我不认为这种方法是理想的,因为他希望这些cookie持续存在。@AdamD我同意-这听起来像是常规cookie更好的用例。将会话留给它们的目的——一个浏览会话。等待几个月绝对不理想,除非他愿意告诉PHP根本不要破坏会话(这会导致其他一系列问题)。但是cookie变量也有问题——列表中的一个高问题是,它们由用户控制(而会话变量则由服务器控制)。如果您在cookie中设置了关键变量,那么您最好有一些方法来验证它们。如果它们是私有的,则可能对它们进行加密,并将整个会话作为base64编码的blob传递。这两种方式都不会很好。@cHao-对,但是这里的用户没有指定任何安全预期。老实说,如果你有非常安全的东西,那么你首先不应该将它存储2个月……”“我想让会话在浏览器关闭时保持不变”——事实上,这就是你想到的实现。你到底想做什么?如果您想让用户保持登录状态,即“记住我”类型的功能,那么最好存储一个带有(加密的)身份验证详细信息的单独持久cookie,并在新会话中重新应用它们。会话并不意味着是持久的,这就是为什么非持久性cookie也被称为会话cookie。嗨,事实上,我正在寻找的功能是非常好的方法。我会考虑这个