我的问题:
session.gc_maxlifetime
中的 php.ini
:session.gc_maxlifetime
是从session_start()点开始还是从服务器发出的最新请求? (假设我有一些没有调用session_start()的请求。)
使用$_SESSION
对象的最佳做法是什么,以免浪费宝贵的RAM(及时自动清除空闲会话)?或者这是在session.gc_maxlifetime
?
isset($_SESSION['any_variable']) === FALSE
session.gc_maxlifetime
?session_start()
:如果某个会话已“超时”,则调用session_start将始终启动一个前一个变量不可用的会话(一个全新的会话)。这是对的吗?答案 0 :(得分:1)
但是,您需要了解一些关于会话的事项。首先是会话的两个组件:服务器端状态记录,其中包含存储在会话中的所有数据,以及PHP用于将特定用户与特定状态记录相关联的客户端令牌。通常,客户端令牌是cookie。 Cookie有自己的到期日期,因此会话可能会在会话状态到期之前到期。在这种情况下,用户将停止发送令牌,并且会话状态实际上丢失。如果您要调整会话持续的时间,则需要设置服务器端状态到期时间和客户端cookie到期时间。
对于陈旧状态,会话垃圾收集系统并不总是在每次调用session_start()时运行。如果是这样的开销将会导致一个有大量会话的大型PHP站点瘫痪。有一些配置选项可以指定GC在任何给定的session_start调用中运行的概率(我认为它默认为1%)。如果它没有运行,那么陈旧的会话记录仍可被视为有效并用于填充$ _SESSION。它可能不会对您的系统产生严重影响,但您需要牢记这一点。