仅在谷歌浏览器中随机丢失会话变量& URL重写

时间:2010-06-01 21:38:07

标签: php apache google-chrome

使用谷歌浏览器,我似乎在页面之间导航时丢失/损坏会话数据(PHP 5.0.4,Apache 2.0.54)。该网站在IE7 / 8,Firefox,Safari和Linux中运行良好。歌剧。问题仅出在Google Chrome上。

我缩小了问题范围。我正在使用搜索友好的URL,并通过.htaccess文件隐藏我的前端控制器(index.php)。所以URL看起来像:www.domain.com/blah/blah/这是.htaccess文件内容:

Options +FollowSymlinks 
RewriteEngine on
#allow cool urls 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*) index.php [L] 
#allow to have Url without index.php 

如果我删除了.htaccess文件,并在网址中公开了前端控制器:www.domain.com/index.php/blah/blah/,Chrome就可以正常使用。

有什么想法吗?我认为Chrome识别使用哪种cookie并发送到服务器有什么问题?这种情况发生在Chrome 4&谢谢!

4 个答案:

答案 0 :(得分:17)

我遇到了同样的问题,为了解决这个问题,我只需要创建一个favicon.ico并将其放在webroot中 - 否则我可以看到使用Fiddler,因为Chrome的每个页面请求都会产生404(尽管我实际上没有链接到页面标记中的favicon。)

在我看来,这显然是Chrome中的一个错误,因为缺少favicon应该对会话数据没有影响。

答案 1 :(得分:8)

原来问题在于我的.htaccess文件的内容。这解决了这个问题:

#<IfModule mod_rewrite.c>

############################################
## enable rewrites

    Options +FollowSymlinks
    RewriteEngine on

############################################
## always send 404 on missing files in these folders

    RewriteCond %{REQUEST_URI} !^/.*(themes|wysiwyg|images|js)/

############################################
## always send 404 on missing favicon

    RewriteRule ^favicon.ico$ favicon.ico [L]

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

############################################
## rewrite everything else to index.php

    RewriteRule .* index.php

#</IfModule>

答案 2 :(得分:0)

尝试使用;

 session_set_cookie_params(0, '/', '.domain.com');

强制执行会话cookie参数。如果您强制执行“无www”或未使用子域,请删除前缀。

您还可以尝试在脚本末尾调用session_write_close()以强制PHP编写并关闭会话(当您在编写会话数据后立即运行重定向标头时,这尤其方便)。

更新:

尝试在.htaccess;

中使用此功能
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

答案 3 :(得分:0)

似乎此问题最近在Chrome浏览器上重新出现。我有一个网站运行了6个月,没有任何问题,突然昨天开始遇到会话数据被覆盖的问题。使用fiddler我可以看到chrome试图加载favicon。我的问题还在于我有一个链接到&#34; favicon.ico&#34;而不是&#34; /favicon.ico"所以chrome然后将favicon.ico附加到我的查询字符串,例如。 /product/abc/favicon.ico导致页面加载两次,第二次覆盖会话数据。所以我的修复是:

  1. 将链接参考更改为&#34; /favicon.ico"
  2. 上传了一个favicon
  3. 将此添加到.htaccess:RewriteRule ^ favicon.ico $ favicon.ico [L]
  4. 最后一步已在几个答案中提到,我认为这是一个很好的答案,除非它失败了,因为我的链接参考是&#34; favicon.ico&#34;。