我知道会话cookie可以被赋予生命周期(session.cookie_lifetime),在生命周期过后,无论用户是否与站点交互,该cookie都会过期。
因此,我假设将其设置为0,以指示它们应该保持活动状态,直到浏览器关闭。
我还认为我理解可以为cookie设置垃圾收集生存期(session.gc_maxlifetime),并且只要用户在两次单击之间没有超过这个时间,那么cookie将保持活动状态。
为了测试这一点,我一直在尝试获取10秒的会话超时。
我试过了:
ini_set('session.gc_maxlifetime',10);但会话至少在1分钟后不会超时。
这是不是因为我只是告诉垃圾收集器,会话的生命周期是10秒,但实际上我并没有触发垃圾收集器?
如何设置垃圾收集器,还是每次请求会话时都运行垃圾收集器?
发布于 2010-02-25 00:56:58
首先,不要混淆cookie设置(客户端)和垃圾收集(服务器端)。Cookie设置仅影响session_id的过期时间。即使浏览器移除了session_id,会话数据也可能仍然存在于服务器上,相反,当cookie仍被浏览器记住时,服务器可以移除数据。
cookie可以设置为在关闭浏览器时过期或在特定的日期和时间过期(我相信默认选项是第一个,但我必须检查它)。在这两种情况下,如果用户与站点交互,cookie将保持有效,因为每次响应都会更新它。
启动垃圾收集时,会话数据会被删除,但您必须考虑到:
总而言之,如果您希望完全控制数据生命周期,则需要将会话数据存储在私有目录中,例如:
session_save_path('/home/foo/sessions');
ini_set('session.gc_maxlifetime', 3*60*60); // 3 hours
ini_set('session.use_only_cookies', TRUE);
session_start();发布于 2010-02-25 00:47:10
服务器在其INI文件中设置了默认超时,如果不是从脚本中覆盖的话。在apache中,我相信它是从PHP.ini内部设置的。您还需要启用垃圾收集功能,我相信这也是在php.ini中设置的。
https://stackoverflow.com/questions/2327681
复制相似问题