【问题标题】:PHP session cookie not saved on androidPHP会话cookie未保存在android上
【发布时间】:2012-05-29 13:16:33
【问题描述】:

我编写了一个使用 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() 应该设置会话 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 肯定会被设置。当然,除非 PHP 在为 Android 浏览器提供服务时有所不同。

这是一个已知问题还是我遗漏了一些明显的问题?是否有解决方法?

【问题讨论】:

  • 您确定要使用测试脚本设置 cookie 吗?您似乎没有在您发布的那个简短脚本中设置任何内容。
  • 您必须先将数据添加到cookie,然后再尝试var_dump
  • session_start() 应该自动设置会话cookie。这是使用 firefox 浏览器观察到的。

标签: php session session-cookies


【解决方案1】:

我意识到这是一个老问题,但我刚刚遇到了同样的问题,在 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]

希望这能帮助遇到同样问题的人:-)

【讨论】:

    猜你喜欢
    • 2018-11-19
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多