3

我创建了一个 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();

我的 IE 隐私和安全配置设置为最低,使用 IE9。

我尝试在标题中放置一个 p3p cookie,但没有任何区别。

我错过了什么?

4

2 回答 2

4

我终于解决了IE的问题。

问题是我们的开发服务器是 dev_landing.mysite.com,而 IE 拒绝来自名称中带有“_”的站点的标头……这是 IE 设计的。

我在这里找到了完整的解释:http: //odedpeer.blogspot.com.es/2009/08/why-are-my-http-cookies-rejected-by-ie.html

继续!!

于 2012-12-27T21:51:57.970 回答
0

您需要确保会话在 ZF1 中开始

 //in bootstrap.php
 protected function _initsession()
    {
        Zend_Session::start();
    }

这将像在普通 PHP 中一样初始化会话。

除非你在别处改变它Zend_Auth 使用 Zend_Session_Namespace('Zend_Auth'); 因此 Zend_Auth 将无法访问您创建的任何名称空间。

当您创建Zend_Session_Namespace()的实例时,如果会话尚未启动,它将启动。

如果您在资源管理器中没有获得新的会话 ID,我不得不怀疑每次您的 boostrap.php 运行(每个请求) Zend_Session_Namespace() 调用。也许尝试在引导程序中调用 start 并在需要时实例化命名空间。您的问题中不存在的某些代码/信息也可能会影响会话。

这里有很多猜测,祝你好运。

于 2012-12-27T10:40:22.187 回答