Php Codeigniter中的会话如何工作

Php Codeigniter中的会话如何工作,php,codeigniter,session,cookies,Php,Codeigniter,Session,Cookies,我试图弄清楚会话是如何在Codeigniter中工作的。阅读在线手册,我看到以下内容: 如果会话数据不存在(或已过期),将创建一个新会话并保存在cookie中。如果会话确实存在,将更新其信息并更新cookie。每次更新都会重新生成会话id 及 注意:默认情况下,会话cookie每五分钟更新一次,以减少处理器负载。如果您反复重新加载页面,您会注意到“上次活动”时间仅在自上次写入cookie后五分钟或更长时间后才会更新。可以通过将system/config/config.php文件中的$config

我试图弄清楚会话是如何在Codeigniter中工作的。阅读在线手册,我看到以下内容:

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

注意:默认情况下,会话cookie每五分钟更新一次,以减少处理器负载。如果您反复重新加载页面,您会注意到“上次活动”时间仅在自上次写入cookie后五分钟或更长时间后才会更新。可以通过将system/config/config.php文件中的$config['sess\u time\u to_update']行更改来配置此时间

问题

  • 加载带有会话类的页面时,如果存在会话,将更新哪些信息?这是存储在cookie中的会话id,还是存储在数据库中的会话数据本身
  • 会话cookie仅每5分钟更新一次。如果用户在5分钟内从A页转到B页,这需要添加新的会话数据,该怎么办?从逻辑上讲,会话数据应该更新,所以我想我对这一行的理解是错误的。。。在这种情况下,我猜会话cookie每5分钟会获得一个新的会话id

  • 任何澄清都会有帮助

    是,关于存储在cookie中的会话id。每5分钟重新生成一次。当需要重新生成时,它将首先获取当前会话数据,然后将其分配给新会话id

    来自CI会话库的代码,函数sess_update():

    //保存旧会话id,以便我们知道要保存哪个记录
    //如果需要,请在数据库中进行更新
    $old_sessiond=$this->userdata['session_id'];
    $new_sessiond='';
    while(strlen($new_sessiond)<32)
    {
    $new_sessiond.=mt_rand(0,mt_getrandmax());
    }
    //为了使会话ID更加安全,我们将它与用户的IP相结合
    $new_sessiond.=$this->CI->input->ip_address();
    //把它变成一个杂烩
    $new_sessiond=md5(uniqid($new_sessiond,TRUE));
    //更新会话数据数组中的会话数据
    $this->userdata['session\u id']=$new\u sessiond;
    $this->userdata['last_activity']=$this->now;
    
    我也感到困惑。我必须说CI 1.7.2上有一个奇怪的行为。当我使用DB类型的会话应用程序工作良好。但在DB类型为false的情况下,应用程序会非常慢。有什么建议吗?非常感谢您提供的有用信息,以及对编程的热爱。
    // 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;