【发布时间】:2015-07-18 17:49:38
【问题描述】:
我正在开发一个使用 CodeIgniter 2.1.3 的旧应用程序。在开发过程中,它在一个 vhost 上运行,可通过 http://vhostname/app 访问(相当于 xampp/htdocs/project/app)。
我将实时系统 1:1 复制到我的开发系统(包括数据库和所有内容)。
系统使用会话来存储访问者的临时数据(例如购物车)。我的问题:在我的开发环境中,每次刷新都会破坏会话。经过一些测试,我发现它发生在system/core/Sessions.php:
// 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;
}
但我完全不知道为什么会发生这种情况,而且我的想法会慢慢用完。
实时系统和开发系统之间唯一值得一提的区别:
- 在实时系统上,应用程序通过 iframe 嵌入到 WordPress 安装中。因此 URL 不是 http://vhost/app 而是 http://projectname.com
更新:
至少我刚刚找到了哈希与加密密钥不匹配的原因。我包括来自 WordPress 的 wp-head.php 以访问 WordPress 功能。但在这一点上,我的会话似乎“损坏”了 - 没有包含会话保持活动状态。
更新 2: 好吧,我想我越来越近了。我试图比较会话 cookie,一个带有 wordpress 包含的版本,一个没有。实际上有很大的不同:
包含 WordPress 的 cookie:
a:6:{s:10:\"session_id\";s:32:\"8e3b975d0b30f6b229f475b2f03947a0\";s:10:\"ip_address\";s:9:\"127.0.0.1\";s:10:\"user_agent\";[...]
没有 WordPress:
a:6:{s:10:"session_id";s:32:"7451cd27e1b45d2c7b8a042ed6b2bf9e";s:10:"ip_address";s:9:"127.0.0.1";s:10:"user_agent";[...]
这些引号从何而来?
谢谢!
【问题讨论】:
-
能否告诉我配置文件中的会话设置以及您使用的浏览器?
标签: php codeigniter session