2017-02-27 49 views
1

首先抱歉可能有重复。我注意到那里有很多问题,并且我读了很多不同的答案。似乎可能有几个原因让会话变量不起作用,但给出的答案中没有一个对我有用。这就是为什么我打开另一个问题,并希望你能帮助我。IE和Firefox既不读取也不删除php会话变量

我创建了我的Apache2 web服务器以下两个PHP文件(位于命名为“ASC-OpenLDAP的”在OpenSuse 13.2虚拟服务器上)

的第一个文件创建会话变量。

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(); 
?> 

到目前为止,我已经测试了PROGRAMM在一些浏览器。 Vivaldi 1.8正确显示test2.php中会话变量的内容,而Internet Explorer 11和Firefox 51则不会。

当然cookies是在三种浏览器中激活的。

我还检查了session.save_path中的会话变量文件。所有浏览器都会在服务器上生成会话文件。该文件的内容始终为test|s:4:"test";。但是,只有Vivaldi能够删除test2.php中的文件。

正如我PROGRAMM会成为最终用户工具,我需要使它的兼容和DAU保存成为可能。 请帮帮我。

+0

没有数据存储在浏览器中,它都存储在服务器端。存储在浏览器中的所有内容都是包含会话ID的cookie。如果某些浏览器无法在会话中显示数据,那么他们可能不会存储会话ID cookie,可能是由于您在浏览器中设置的cookie政策。 Firefox有一个控制台,可以向您显示诸如服务器发送的cookie以及作为请求的一部分发送的cookie等内容,可能值得检查以查看会话cookie的情况。 – GordonM

+0

是的。这就是我检查它的原因。会话日期与每个浏览器一起存储在服务器上,并具有正确的内容。 Firefox控制台说:'Set-Cookie:'PHPSESSID = 8c5hskk514dlkmpvn16k1mvn41sifcrmnnaadcoofsr979hlkpt1; path =/var/lib/php5 /''我认为问题更多的在于访问已存储的数据,因为读取和删除不适用于IE和Firefox。 – G4schberle

+0

使用Chrome 56时,它也无法正常工作。与Firefox和IE相同的问题。 – G4schberle

回答

0

从我们能够推断出这个问题的评论谈话,对于会话cookie指定的路径是不正确的。

与cookie关联的路径指定cookie有效的域的哪些部分。例如,如果您只希望cookie的有效期为www.example.com/foo/bar/,那么Cookie的路径应该是/foo/bar/这意味着如果您访问的URL是www.example.com/foo/bar/或其子路径,浏览器将只在Cookie标头中包含会话Cookie(例如www.example.com/foo/bar/baz/quux.php)。如果您访问www.example.com/foo/,那么cookie将不会被发送回Cookie标头中的服务器。

如果您希望让网站的不同部分拥有不同的会话(例如,如果您在管理部分中的电子商务网站可能希望保留不同的会话数据篮子),但在这种情况下,路径设置不正确,路径既不包含test1.php也不包含test2.php。

通过设置session.cookie_path的值(默认情况下它应该是/,但由于某种原因,它不在您的安装中),您可以在php.ini中指定该路径来设置路径。

您还可以使用session_set_cookie_params()以每个脚本为基础进行设置。

至于为什么它在Vivaldi中工作,最可能的解释是vivaldi中存在导致cookie上的路径参数被忽略的错误。您可能想要提交一份关于此的错误报告。 FireFox/IE/Chrome等的行为是正确的行为。