我有一个非常奇怪的问题。我使用ZfcUser作为身份验证模块。我使用ZF3和ZfcUser模块在很多不同的环境中做了很多项目。我经历过这样的问题,我将在下面解释。在我目前的项目中,我无法登录到生产服务器上的系统。我成功地从本地环境或其他测试环境登录。
我试着调查最近发生的事情。我去了生产登录页面,输入了我的凭据,系统将我重定向到主页。没有错误,没有警告...... notihnig。但是我没有登录。我从框架(identity())检查身份 - 它是null。我认为这可能是php会话的服务器问题。我检查了服务器上的会话。似乎问题不在那里。
框架成功地将会话中所需的数据存储起来。我找到了Zend_Auth密钥,身份密钥和登录用户的值。似乎用php会话一切都还可以。
我无能为力,甚至无法思考这里发生了什么,问题出在哪里。没有错误被抛出。我跟踪本地和生产环境中的代码执行情况。一切都是一样的。框架似乎运作正常。但IDENTITY总是空的
答案 0 :(得分:0)
发现问题。
因此,该网站在子域名下运行。让我们说 sub.domain.tld 。此网站与主域名 domain.tld 不同。在程序代码中,应用程序的favicon从 domain.tld 请求,而不是来自 sub.domain.tld 。
因此,当您点击http://sub.domain.tld时,浏览器会存储两个PHPSESSID Cookie。一个在 sub.domain 之下,另一个在 domain.tld 之下,这会让Chrome搞砸了
有趣的是,Firefox和IE并没有搞乱这些会话,而且该网站正常运作。我不说Crhome是有罪的。显然,程序代码正在解决问题。但Chrome认识到一个域是另一个域的子域
这就是为什么,当我尝试在不同的环境中运行项目作为本地设置或不同的域时,例如 test.different-domain.tld ,又设置了两个PHPSESSID Cookie,但是在这段时间Chrome并没有弄乱会话,因为 test.different-domain.tld 是未被识别为 domain.tld
的子域名非常小而愚蠢的错误,但是存在大问题