【问题标题】:Android browser not reading variable in PHP sessionAndroid浏览器未在PHP会话中读取变量
【发布时间】: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


【解决方案1】:

在尝试创建MCVE 时,通过消除元素,我找到了问题的“原因”。这段无害的 CSS:

@media (max-width: 767px){#bg{background:url("../video/video.png") center center/cover no-repeat}#bg video{display:none}}

这是 Koala 使用 SASS 制作的压缩 CSS 文件中的一部分。

从我的 style.css 文件中删除它可以解决问题; Android 可以突然从会话中读取正确的变量而不会出现问题。

当我使用该位 CSS 的标准格式版本而不是此压缩版本时,问题也消失了。

为什么这会导致 Android 无法从会话中读取最新的变量,我不知道。这对我来说完全没有意义。有什么想法吗?

考虑到媒体查询的目标是移动设备,问题可能从来都不是专门针对 Android 的,而是针对移动设备的。我没有在 iPhone 上测试过任何东西 - 目前无法使用。

但我不明白 CSS 错误如何导致会话出现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2015-12-18
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2015-04-28
    相关资源
    最近更新 更多