PHP会话cookie没有保存在android上

时间:2012-05-23 01:30:01

标签: php session session-cookies

我写了一个使用php会话的php web应用程序。当我在Android手机上试用它时,事实证明,浏览器没有保留会话cookie。 我把它归结为这个超短测试脚本:

<?php
session_start();
var_dump($_COOKIE);
?>

我在其他浏览器中可以看到的预期行为是: 在第一次通话中,我们看到:

array(0) { }

在第二次及以后的通话中,我们看到类似的内容:

array(1) { ["PHPSESSID"]=> string(32) "8f08c514a5c15c36309e9a435ebcc8ec" } 

在Android手机上,$_COOKIE数组保持为空,我始终收到第一个回复(array(0) { })。

我检查了设置并启用了Cookie。还有其他需要登录的网站(不是我写的)确实可以正常工作。 我还尝试清除所有cookie和缓存以防万一,但它没有改变任何东西。

编辑:为了澄清,session_start()应该设置sesssion cookie,它实际上可以在台式机上使用Firefox。我还查看了http标题并找到了

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=a270cbe1b57ba089c1eedacd8344e871; path=/ 

所以cookie肯定会被设置。当然,除非在服务Android浏览器时PHP做出不同的事情。

这是一个已知问题还是我错过了一些明显的东西?是否有解决方法?

1 个答案:

答案 0 :(得分:0)

我意识到这是一个老问题,但我遇到了同样的问题,无法在StackOverflow或Google上的任何地方找到答案,所以我想我会分享我的解决方案。

如果您不使用子域,某些浏览器(主要是移动版)将插入“www”。例如,如果您的网站是example.com,则浏览器会将其更改为www.example.com。

如果您的会话是在example.com上设置的,那么会话cookie的设置也是如此,并且在www.example.com上无法识别。 我知道修复此问题的最简单方法是将以下行添加到.htaccess文件中:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]

希望这可以帮助有同样问题的人: - )

相关问题