Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.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会话过期_Php_Session - Fatal编程技术网

当用户仍在网站上时PHP会话过期

当用户仍在网站上时PHP会话过期,php,session,Php,Session,我是一名PHP新手,正在努力了解会话是如何工作的。我有一个关于php中会话行为的一般性问题 所以我知道每次调用session_start()时,垃圾收集器都可能以一定的概率被调用。所以我的第一个问题是,假设我的网站只有100个用户,在web服务器上的session.save_path()文件夹中存储了2000个会话。如果作为100个用户之一的用户A登录到该网站并调用会话_start(),则是用户A以前的会话之一已销毁,还是属于所有用户的2000个会话之一已销毁 我的第二个问题是,假设用户A在网站

我是一名PHP新手,正在努力了解会话是如何工作的。我有一个关于php中会话行为的一般性问题

所以我知道每次调用session_start()时,垃圾收集器都可能以一定的概率被调用。所以我的第一个问题是,假设我的网站只有100个用户,在web服务器上的session.save_path()文件夹中存储了2000个会话。如果作为100个用户之一的用户A登录到该网站并调用会话_start(),则是用户A以前的会话之一已销毁,还是属于所有用户的2000个会话之一已销毁

我的第二个问题是,假设用户A在网站上停留约30分钟,“session.gc_maxlife”设置为1440秒,即24分钟,24分钟后,即使用户A在网站上仍处于活动状态,垃圾收集器是否有可能删除用户A的会话

如果是这样的话,那么每24分钟就会启动一个新会话,其中包含以前删除的会话的所有相同信息,因为这必须是防止用户数据丢失的情况

如果这些问题听起来很简单,我很抱歉,但是我对会议的概念很困惑,我想澄清这个概念


非常感谢您的帮助。

PHP的会话垃圾收集器以session.gc_probability除以session.gc_除数定义的概率运行。默认情况下,这是1/100,这意味着以1/100的概率检查上述超时值

这意味着无论何时启动新会话,都有可能触发垃圾收集器。所有早于maxlifetime的会话都将被删除

如果站点上有人处于活动状态,则此会话将永远不会被删除。在每次页面刷新时,实际会话将在此会话的生存期内重置。只有未使用的会话才会被删除。因此,如果用户在页面上无所事事,那么这个会话可能会被删除。他必须开始一次新的治疗


我希望这能帮助您理解会话

垃圾收集适用于所有会话,因为PHP不知道会话的“所有权”;在
time()-ini\u get('session.gc\u maxlifetime')
之前修改的所有会话对象都将被删除

每当使用
session\u start()
访问特定会话对象时,在请求结束时(隐式)或调用
session\u write\u close()
时(显式),其修改时间(应该)都会得到更新。这意味着,只要用户偶尔继续加载页面,会话就不会被破坏


顺便说一句,我谈论的是会话对象而不是文件,因为会话的物理存储可以使用
session\u set\u save\u handler()

来更改。关于原始海报中关于“用户A”会话与所有用户会话的问题,当运行垃圾收集时,这会影响所有会话。PHP无法区分用户的新会话和任意用户的新会话。我有一个关于Benjamin问题的后续问题。我想知道是在每次页面刷新时重置会话生存期,还是在每次页面刷新后启动一个全新的会话?因为当刷新页面时,代码会重新运行,会话_start()也会运行。会话_start()创建会话或恢复当前会话。如果会话成功启动,此函数将返回TRUE,否则返回FALSE。因此,如果一个会话已准备就绪,则不会启动新会话