【问题标题】:PHP $_SESSION empty after hyperlink click [duplicate]超链接单击后PHP $_SESSION为空[重复]
【发布时间】:2020-04-03 02:55:39
【问题描述】:

我有 2 页。 page1 启动一个会话变量并有一个指向 page2 的链接。两个页面都包含相同的标题,其中包含 session_start。

但我无法理解为什么会话数组没有通过第二页。

header.php

<?php session_start(); ?>
<!DOCTYPE html>
<html>
    <body>
    <?php print_r($_SESSION); ?>

page1.php 正确显示 $_SESSION 内容,如下所示

<?php
    include('header.php');
    $_SESSION['usager'] = "popo";
?>
    <a href="page2.php"> Page 2 </a>
    </body>
</html>

page2.php 有一个空数组作为 $_SESSION,因此什么也不显示

<?php
    include('header.php');
    echo "hi";
?>
    </body>
</html>

我尝试过的

  • 将 href 从相对链接更改为绝对链接。没有区别。
  • 检查 PHPSESSID,它就在那里。
  • 同一服务器上的某些项目不会触发该问题。
  • 在 Chrome 上,按 shift + f5 删除缓存。没有区别。

我访问过的页面

【问题讨论】:

  • 只是好奇,page1.php 在运行$_SESSION['usager'] = "popo"; print_r($_SESSION) 之后如何显示Array [useager] =&gt; popo? (我刚试过没有&lt;html&gt; 的东西,它似乎对我使用PHP 的内部服务器有效) 你使用的是哪个版本的PHP?哪个服务器?
  • 乍一看,我觉得还可以。 phpinfo() 中有关会话的任何内容看起来很奇怪?
  • 错误报告是否显示任何内容? P.s.:您必须对我们中的一个人进行 ping 操作才能获得直接响应。我/其他人可能没有查看问题或没有打开窗口/选项卡。 @Maude
  • @kerbholz 感谢您提及这一点。我没有注意到,但确实,我第一次运行页面时,会话数组是空的。当我刷新它显示的页面时。我使用的是 7.2.24,它在学校服务器上,所以很难确切知道发生了什么。
  • @AlanP。我不知道这个命令! session 部分看起来不错,尽管 session.cookie_domain 和 session.cookie_httponly 都“没有价值”。网上的一些研究似乎表明这与问题无关。

标签: php session redirect session-cookies


【解决方案1】:

文件以 UTF8-BOM 编码!

我采用了可用的示例here 并注意到它有效。我将 w3schools 代码复制到我的 page1 和 page2 中,但它不起作用。

我最终将这两个文件都发送到了 notepad++ 中,并注意到有问题的项目是用 UTF8-BOM 编码的,而工作的项目是用 UTF8 编码的。

参考解释:PHP session with UTF-8-BOM encoding

【讨论】:

    猜你喜欢
    • 2020-03-23
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    相关资源
    最近更新 更多