Codeigniter中的会话如何工作

Codeigniter中的会话如何工作

问题描述:

我想知道会话是如何在Codeigniter中工作的。阅读在线手册,我看到以下内容:Codeigniter中的会话如何工作

如果会话数据不存在(或者已过期),则会创建一个新会话并保存在cookie中。如果会话确实存在,其信息将被更新并且cookie将被更新。每次更新后,会重新生成session_id。

注:会话cookie仅默认为每五分钟更新一次,以减少处理器负载。如果您反复重新载入页面,您会注意到,如果自上次写入cookie以来五分钟或更长时间已过,“最后一次活动”时间只会更新。这个时间可以通过更改system/config/config.php文件中的$ config ['sess_time_to_update']行进行配置。

问题

  1. 什么信息,如果当会话类页面加载存在会话更新?这是会话ID存储在cookie中,还是会话数据本身存储在数据库中?
  2. 会话cookie只会每5分钟更新一次。如果用户在5分钟内从页面A转到页面B,这需要添加新的会话数据呢?从逻辑上讲,会话数据应该更新,所以我想我错误地理解了这一行......在这种情况下,我会猜测会话cookie每5分钟获取一个新的会话ID。

任何澄清将有助于!

+0

我还具有混淆。我必须说CI 1.7.2上的一个奇怪的行为。当我使用数据库类型会话应用程序工作正常。但在数据库类型为false的情况下会使应用程序非常慢。有什么建议么? – 2012-10-10 12:27:31

是的,是关于存储在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