我已经创建了Zend Framework网站应用程序密集型会议。
它在Chrome和Firefox中运行良好,但它在IE中不起作用。 会话重置IE中的每个页面。
查看标题我发现IE浏览器在同一浏览器中的每个获取或发布中获取不同的phpsessid cookie,因此会话无法正常工作。在FF和Chrome中,phpsessid cookie仍然存在。
任何人都知道为什么只能在IE中发生这种情况?
我在bootstrap.php中有这段代码:
$generalSession = new Zend_Session_Namespace('MyNameHere');
$generalSession ->setExpirationSeconds(1000 * 60);
我使用以下方法恢复会话:
Zend_Auth::getInstance()->getStorage()->read();
使用IE9将我的IE隐私和安全配置设置为最小。
我尝试在标题中放置一个p3p cookie,但没有区别。
我错过了什么?
答案 0 :(得分:4)
我终于用IE解决了这个问题。
事情是,我们的开发服务器是dev_landing.mysite.com,IE拒绝来自名称中带有“_”的网站的标题...这是IE中的设计。
我在这里找到了完整的解释: http://odedpeer.blogspot.com.es/2009/08/why-are-my-http-cookies-rejected-by-ie.html
继续做!!
答案 1 :(得分:0)
您需要确保session starts in ZF1 is:
//in bootstrap.php
protected function _initsession()
{
Zend_Session::start();
}
这将初始化会话,就像在vanilla PHP中一样。
除非您将其更改为Zend_Auth uses the Zend_Session_Namespace('Zend_Auth');,否则Zend_Auth将无法访问您创建的任何命名空间。
当您创建Zend_Session_Namespace()的实例时,会话将在尚未启动的情况下启动。
我不得不怀疑,如果你没有在资源管理器中获得新的会话ID,每次你的boostrap.php运行(每个请求)Zend_Session_Namespace()都会调用。 也许尝试只需在引导程序中调用start,然后在需要时实例化名称空间。您的问题中没有的某些代码/信息也可能会影响会话。
这里有很多猜测,祝你好运。