Php Codeigniter中的会话如何工作
我试图弄清楚会话是如何在Codeigniter中工作的。阅读在线手册,我看到以下内容: 如果会话数据不存在(或已过期),将创建一个新会话并保存在cookie中。如果会话确实存在,将更新其信息并更新cookie。每次更新都会重新生成会话id 及 注意:默认情况下,会话cookie每五分钟更新一次,以减少处理器负载。如果您反复重新加载页面,您会注意到“上次活动”时间仅在自上次写入cookie后五分钟或更长时间后才会更新。可以通过将system/config/config.php文件中的$config['sess\u time\u to_update']行更改来配置此时间 问题:Php Codeigniter中的会话如何工作,php,codeigniter,session,cookies,Php,Codeigniter,Session,Cookies,我试图弄清楚会话是如何在Codeigniter中工作的。阅读在线手册,我看到以下内容: 如果会话数据不存在(或已过期),将创建一个新会话并保存在cookie中。如果会话确实存在,将更新其信息并更新cookie。每次更新都会重新生成会话id 及 注意:默认情况下,会话cookie每五分钟更新一次,以减少处理器负载。如果您反复重新加载页面,您会注意到“上次活动”时间仅在自上次写入cookie后五分钟或更长时间后才会更新。可以通过将system/config/config.php文件中的$config
任何澄清都会有帮助 是,关于存储在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;