【发布时间】:2020-07-26 13:18:40
【问题描述】:
我有一个 PHP 会话脚本,可以在除 Android 移动设备之外的所有浏览器上正常运行 - 如果您查看桌面站点,它也可以在 Android 浏览器中正常运行。 Android 上的 Chrome 和 MS Edge 都是一样的。
PHP 脚本是基于地理和/或 slug 信息的内容切换器。我不打算在这里发布整个脚本;一切正常。
这是主页上的相关部分:
<?php session_start();
... bunch of stuff that produces an $n value ...
echo 'we have a content number here: ' . $n;
$_SESSION['content_number'] = $n;
}
在所有平台(包括 Android 移动浏览器)中都会回显正确的内容编号。接下来的页面应该很容易通过以下方式获取 $n 值:
<?php session_start();
if (isset($_SESSION['content_number'])){
$n = $_SESSION['content_number'];
} else {
... cms specific homepage redirect ...;
};
这在所有浏览器中都可以正常工作,但在 Android 移动浏览器中,其他页面会重定向到主页。由于某种原因无法识别会话内容编号。
当我从下一页删除 if else 条件并尝试回显 $_SESSION['content_number'] 或 $n 时,什么都找不到。
当我在主页脚本中硬编码一个 $n 值时(例如 $n = '2';),Android 移动浏览器确实会打开具有正确内容的下一页:
<?php session_start();
$n = '2';
$_SESSION['content_number'] = $n;
}
没用,但效果很好。显然会话机制、cookie 等没有任何问题!
如果没有后续页面中的 if else 条件,在主页上使用$n = '2';,回显会话内容编号也可以正常工作。 PHP 会话有效。
Android 手机无法读取 $n 而其他所有浏览器都可以读取的原因可能是什么?
我应该考虑 Android 移动设备上的 PHP 会话是否存在任何已知问题?
还有其他方法可以设置会话变量吗?我已尝试清理和处理 $n,但没有发现任何影响。
我还能尝试解决什么问题?我的想法不多了。
编辑:
Android 上下一页的 var_dump:
array(3) { ["Session"]=> array(0) { } ["ProcessWire1"]=> array(1) { ["SessionHandlerDB"]=> array(1) { ["ts"]=> int(1595783349) } } ["content_number"]=> NULL }
其他浏览器下下一页的var_dump:
array(3) { ["Session"]=> array(0) { } ["ProcessWire1"]=> array(1) { ["SessionHandlerDB"]=> array(1) { ["ts"]=> int(1595783260) } } ["content_number"]=> int(1) }
【问题讨论】:
-
如果您在开始页面上硬编码
$n = 2时在 Android 上一切正常...但不是在$n = { bunch of stuff that produces an $n value }时...您剩余页面的行为只有在 @ 时才有意义987654334@。看看var_dump($_SESSION)在 Android 上显示的内容。 -
你能在你创建
$n的页面上用Android确认$_SESSION['content_number']是否是NULL并设置它吗?var_dump在第一页。这里的事情是,浏览器与 PHP 会话数据或其他变量无关,除了提供带有会话 ID 的 cookie,除非来自浏览器的特定输入会影响您的程序流程。 ...现在,澄清一下,您正在定义content_number,但是稍后您引用summit_number? ... 可能是一个好主意,创建 MCVE 以查看哪些错误。 -
请在第一页
var_dump($_SESSION)确保生成的$n在Android 实例上实际保存到$_SESSION中。在任何情况下,如果硬编码的$n = 2;被正确存储用于 Android 会话,但生成的$n不是,唯一一致的解释是生成的$n值有一些特殊之处导致您对 Android 的侥幸心理。您可以在此处共享的 MCVE 将使其他人更容易调试此堆。 -
幽默自己并拥有页面
echo SID;,看看它是否保持不变或变化,即。如果您仍在使用相同的会话。是的,Android 浏览器 cookie 处理可能存在故障。您是否在另一部手机和相同的浏览器上尝试过此操作,以消除它不是您设备的安装/配置所独有的?浏览器版本将是其他解决此问题的相关信息。 -
如果会话 ID 保持不变,则在 Android 上可以正常处理会话/cookie。由于会话变量的设置和读取与浏览器无关(浏览器的唯一工作是传递 cookie/SID),因此这里的某些内容不会加起来。调试的下一步:Create a MCVE 复制问题,然后在此处分享,以便其他人验证和测试可能的解决方案。
标签: php android session mobile session-variables