Jen*_*erg 20 php cookies session codeigniter
在CodeIgniter中,会话数据默认保存在cookie中.但是我的服务器上必须还有一个文件(命名为会话ID)来验证数据(在cookie中)是否有效,或者我错了?
我正在搜索会话保存的位置.我已经查看了"session.save_path"目录(/ var/lib/php5),但是在这个目录中只有其他会话,而不是CodeIgniter会话.
我也没有在数据库中保存会话,所以CodeIgniter如何知道数据(在cookie中)是有效的?
Sha*_*ane 10
本机codeigniter安装会覆盖常规的PHP会话处理,并使用自己的数据处理系统,这就是您无法在正常位置找到它的原因.(我也会提到我个人发现它的实现方式有点不安全,因为你的所有会话数据都直接存储在用户浏览器会话cookie中.)
您可以像Residuum建议并通过codeigniter会话库回溯并找到它存储的位置,或者您可以使用类似OB_Session的方式覆盖会话处理.(http://bleakview.orgfree.com/obsession/)
我强烈建议您安装OB_Session或类似的东西,因为它将使用本机PHP会话处理,它将保持您的cookie A)变得太大并且与浏览器字节限制崩溃,或B)允许敏感用户要存储在客户端的数据.
最后,根据您要执行的操作,我将遵循CI用户指南说明并将会话数据存储在数据库中.(http://codeigniter.com/user_guide/libraries/sessions.html)这将使您更容易处理数据,甚至更新和扩展Codeigniter存储的内容.请记住,即使您将其存储在数据库中,您仍然必须更改为类似OB_Session,因为即使更改为数据库,您的cookie仍会保留所有数据.
cookie包含会话数据的md5哈希值以及在加载数据时验证的cookie的加密密钥,请参阅system/libraries/Session.php,function sess_read()lines 140ff:
// Decrypt the cookie data
if ($this->sess_encrypt_cookie == TRUE)
{
$session = $this->CI->encrypt->decode($session);
}
else
{
// encryption was not used, so we need to check the md5 hash
$hash = substr($session, strlen($session)-32); // get last 32 chars
$session = substr($session, 0, strlen($session)-32);
// Does the md5 hash match? This is to prevent manipulation of session data in userspace
if ($hash !== md5($session.$this->encryption_key))
{
log_message('error', 'The session cookie data did not match what was expected. This could be a possible hacking attempt.');
$this->sess_destroy();
return FALSE;
}
}
Run Code Online (Sandbox Code Playgroud)
这不是直接回答你的问题,但我认为这可能有用.
使用以下内容查看PHP会话.
print_r ($_SESSION);
Run Code Online (Sandbox Code Playgroud)
使用以下命令查看CI会话.
print_r ($this->session->userdata);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14536 次 |
| 最近记录: |