Codeigniter中的会话如何工作
问题描述:
我想知道会话是如何在Codeigniter中工作的。阅读在线手册,我看到以下内容:Codeigniter中的会话如何工作
如果会话数据不存在(或者已过期),则会创建一个新会话并保存在cookie中。如果会话确实存在,其信息将被更新并且cookie将被更新。每次更新后,会重新生成session_id。
和
注:会话cookie仅默认为每五分钟更新一次,以减少处理器负载。如果您反复重新载入页面,您会注意到,如果自上次写入cookie以来五分钟或更长时间已过,“最后一次活动”时间只会更新。这个时间可以通过更改system/config/config.php文件中的$ config ['sess_time_to_update']行进行配置。
问题:
- 什么信息,如果当会话类页面加载存在会话更新?这是会话ID存储在cookie中,还是会话数据本身存储在数据库中?
- 会话cookie只会每5分钟更新一次。如果用户在5分钟内从页面A转到页面B,这需要添加新的会话数据呢?从逻辑上讲,会话数据应该更新,所以我想我错误地理解了这一行......在这种情况下,我会猜测会话cookie每5分钟获取一个新的会话ID。
任何澄清将有助于!
答
是的,是关于存储在cookie中的会话ID。这是每5分钟重新生成一次。当重新生成时,首先会获取当前会话数据,然后将其分配给新的会话ID。从CI会话库函数sess_update()
代码:
// Save the old session id so we know which record to
// update in the database if we need it
$old_sessid = $this->userdata['session_id'];
$new_sessid = '';
while (strlen($new_sessid) < 32)
{
$new_sessid .= mt_rand(0, mt_getrandmax());
}
// To make the session ID even more secure we'll combine it with the user's IP
$new_sessid .= $this->CI->input->ip_address();
// Turn it into a hash
$new_sessid = md5(uniqid($new_sessid, TRUE));
// Update the session data in the session data array
$this->userdata['session_id'] = $new_sessid;
$this->userdata['last_activity'] = $this->now;
+0
真的非常感谢这个有用的信息,所以对于编程的热爱。 – 2016-08-22 15:17:04
我还具有混淆。我必须说CI 1.7.2上的一个奇怪的行为。当我使用数据库类型会话应用程序工作正常。但在数据库类型为false的情况下会使应用程序非常慢。有什么建议么? – 2012-10-10 12:27:31