【发布时间】:2017-07-17 20:39:35
【问题描述】:
首先对可能的重复感到抱歉。我注意到有很多关于同一案例的问题,我已经阅读了大量不同的答案。似乎会话变量不起作用可能有几个原因,但没有给定的答案对我有用。这就是为什么我提出另一个问题,希望你能帮助我。
我在我的 apache2 网络服务器(位于名为“asc-OpenLDAP”的 openSuse 13.2 虚拟服务器上)上创建了以下两个 php 文件
第一个文件创建会话变量。
test1.php:
<?php
session_start();
$_SESSION['test'] = 'test';
header('Location: test2.php');
exit();
?>
第二个文件应该读取会话变量并创建一个输出。
test2.php:
<?php
session_start();
echo("Test: " . $_SESSION['test']);
session_unset();
session_destroy();
exit();
?>
到目前为止,我已经用一些浏览器测试了这个程序。 Vivaldi 1.8 正确显示了 test2.php 中 session 变量的内容,而 Internet Explorer 11 和 Firefox 51 则不会。
当然 cookie 在所有三个浏览器中都被激活。
我还在 session.save_path 中检查了会话变量文件。所有浏览器都会在服务器上生成一个会话文件。此文件的内容始终为test|s:4:"test";。但话又说回来,只有 Vivaldi 能够删除 test2.php 中的文件。
随着我的程序将成为最终用户工具,我需要使其尽可能兼容并保存 dau。 请帮帮我。
【问题讨论】:
-
没有数据存储在浏览器中,所有数据都存储在服务器端。浏览器上存储的只是一个包含会话 ID 的 cookie。如果某些浏览器无法在会话中显示数据,那么它们可能没有存储会话 ID cookie,这可能是由于您在相关浏览器中设置的任何 cookie 策略。 Firefox 有一个控制台,可以显示服务器发送了哪些 cookie 以及作为请求的一部分发送了哪些 cookie,可能值得检查一下会话 cookie 发生了什么。
-
是的。这就是我检查它的原因。 ^^ 会话日期与每个浏览器一起存储在服务器上,并且具有正确的内容。 Firefox 控制台说:'Set-Cookie:"PHPSESSID=8c5hskk514dlkmpvn16k1mvn41sifcrmnnaadcoofsr979hlkpt1; path=/var/lib/php5/"' 我认为问题更多在于访问已经存储的数据,因为读取和删除不适用于 IE 和 Firefox。
-
Chrome 56 也无法正常工作。与 Firefox 和 IE 相同的问题。
-
后续请求是否在请求中发送了相应的 Cookie 头?如果不是,那么它仍然可能是客户端 cookie 问题。如果设置了 cookie,那么它可能是一个竞争条件,您可能会在 test.php 完成刷新会话数据之前被重定向到 test2.php。也许尝试用超链接替换位置重定向只是为了看看会发生什么?
-
遗憾的是,超链接而不是重定向并没有改变任何东西。但我发现了其他一些事情:在 test1.php 上,会话保存在服务器上。但是在重定向到 test2.php 之后,会话 ID 发生了变化。可能无法匹配收到的会话 id 并创建一个新的。
标签: php internet-explorer session firefox cross-browser