我已经有一段时间没有使用php了,回到我的一个项目中,发现session变量没有被存储。这让我很惊讶,因为上次我检查的时候,它工作了,我没有使用php(因此没有改变代码或配置)。
情况如下:会话不是跨页面存储的(我可以保存它,它在页面上显示相同,但当我刷新-没有任何变化)。
我看了PHP Session data not being saved并复制了这个例子:
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views'] = $_SESSION['views']+ 1;
else
$_SESSION['views'] = 1;
echo "views = ". $_SESSION['views'];
echo '<p><a href="page1.php">Refresh</a></p>';
字符串
但没有什么变化:我仍然有视图= 1。
尽管如此,我没有改变我的配置,但我仍然看了phpinfo():x1c 0d1x
我检查了我的权限写入文件夹/tmp -他们是好的,而且每次刷新后,一个新的文件出现在那里。
然后我在其他浏览器中检查了这项工作:令我惊讶的是,它在firefox中也能工作:数字正确地增加了。
所以情况是:在Chrome中不起作用,在Firefox中起作用。我默认使用Chrome。我还记得当它切换到 Flink 时玩Chrome选项,但据我所知我把所有东西都改回来了。
有什么办法可以修复Chrome中的PHP会话?
附注:
- 在Chrome中启用cookie
- 会话文件在/tmp中,我试图将其全部删除,稍后当我在Chrome中刷新页面时-出现新文件
- 在标头中,我发送Cookie:PHPSESSID=mystring但没有会话ID
6条答案
按热度按时间l2osamch1#
这是Chromium. Issue 114877中的已知问题
在根文件夹中放置一个favicon,这应该可以纠正您的问题。
6xfqseft2#
我曾经在不同的浏览器上使用php会话时遇到过一些边界情况。
如果在
echo
语句之前使用session_write_close(),您能否确认代码示例是否正常工作?另外,你应该考虑将你的会话保存到另一个存储中,而不是保存到tmp文件夹中的默认文件中。Memcache,redis,数据库都是可以扩展的选项。
p4rjhz4m3#
在Chrome中打开Cookie并退出隐身(隐私浏览)。
**edit:**尝试将session.cache_expire设置回180(默认值)
ukxgm1gy4#
尝试使用前缀
;
在php.ini
中注解session.save_path = "/tmp"
指令。因此,重新启动
apache
后,phpinfo()
应显示session_save_path
的no value
mdfafbf15#
请在php.ini中检查会话使用cookie。如果为零,则将其激活为1,如会话。use_cookies = 1
gt0wga4j6#
我修复它的方法是,从域名中删除www:
字符串
在那之后,