我在Chrome和Firefox上遇到了一个奇怪的问题,对于更改它的工作正常IE。[编辑1:IE有时也会出现问题]
前提:
- 在我的主页View.php中,我使用jQuery创建了一个cookie,比如Cookie1。
- 我的主页有一个应用程序的链接,我们称之为App1。
- Cookie1 在 App1 的控制器中访问,如果未找到,它将重定向回主页。
问题陈述
- 清除缓存
- 进入首页(Cookie1 已创建)
- 单击指向App1的链接。 App1
- 被重定向到主页(App1 无法访问 Cookie1)
- 再次单击App1链接,App1工作正常。
片段
首页查看.php
createCookie('loggedin_ind', true);
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else{
var expires = "";
}
document.cookie = name+"="+value+expires+"; path=/";
}
App1Contoller.php
function index()
{
if(isset($_COOKIE["loggedin_ind"]))
{
//Display App1
}
else
{
redirect('http://localhost/Sitename');
}
}
任何人都可以建议为什么cookie没有被写入(通过jQuery)或没有被读取(由php)仅在第一次?从第二次开始工作正常。
它在我的本地主机上也可以正常工作,仅当代码迁移到服务器时才会出现问题。
编辑2:我用会话替换了cookie逻辑,但问题仍然存在。
编辑3:我有一种强烈的感觉,这是一个与服务器相关的问题。我在我的 hostgator 共享主机上托管了相同的代码,它在那里工作正常,问题只发生在我的 godaddy VDS 上。谁能建议我如何检查我的两台服务器上的 cookie/会话处理方式是否不同。谢谢。
任何帮助都非常感谢。谢谢。
我已经检查了您的代码,代码中没有问题,服务器端有问题
下面是一些步骤,请查看它并与您现有的配置进行比较
第 1 步:-
使用输出缓冲在调用此函数之前发送输出,在发送浏览器之前,浏览器的所有输出的开销都会缓冲在服务器中。您可以通过在脚本中调用 ob_start() 和 ob_end_flush(),或者在 php.ini 或服务器配置文件中设置 output_buffering 配置指令来执行此操作。
第 2 步:-
PHP 指令 register_globals 设置为 on,然后 cookie 值也将变成变量。
在您的情况下最重要
设置值为 FALSE 的 cookie 将尝试删除该 cookie,您不应使用布尔值。相反,使用 0 表示 FALSE,使用 1 表示 TRUE。
希望这对你有所帮助:)
我认为查看在向 App1 的第一个和第二个请求中发送的纯 HTTP 标头会很有帮助......
如果 cookie 在两个标头中都持久存在,则与服务器有关。否则我会仔细看看浏览器。
请求应如下所示:
GET /app1 HTTP/1.1
Host: default.localhost
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: loggedin_ind=1
以下是 Firefox 查看纯 HTTP 标头的推荐扩展列表:哪个 Firefox 扩展可以转储 HTTP 响应?我个人在大多数情况下使用Firebug。
我的一个项目也有类似的问题。我从我的主页发布到一个php脚本,然后根据php页面的结果,它将被重定向回我的主页。重定向回我的主页时,我会丢失会话。
无论如何,您如何显示应用程序 1?
我发现我的错误是我用绝对 url 而不是相对的引用我的 php 脚本,这将导致 php 脚本启动新会话,有效地覆盖我之前的会话。
当我将我的帖子网址从http://www.mysite.com/folder/script.php 至/文件夹/脚本.php我将不再覆盖我的会话。