无法在本地计算机上使用php的$ _SESSION
它可以在实时服务器上正常运行,但不能在本地计算机上运行
我尝试在Windows上使用apache和php,在mac上使用apache和php,在debian上使用apache和php,它们都不起作用(我的实时服务器也正在运行debian 9,我在本地尝试过同样的方法)
在firefox的开发人员工具>网络>标头中,我可以看到php正在发送set-cookie,但是由于某些原因,它没有被设置(存储中没有cookie> cookie,并且我的脚本无法正常工作设置了Cookie)
我没有使用ssl / https,而是设置了“ session.cookie_secure = 0并关闭”,但是由于某种原因,这就是set-cookie标头的样子:“ Set-Cookie:PHPSESSID = XXXXX; path = /; HttpOnly; Secure”,我不认为php应该设置Secure标志,因为我在php.ini中明确禁用了它?
是的,每个使用会话功能的文件中都有一个session_start()
没有任何apache / php错误,我什至启用了xdebug
使用localhost,127.0.0.1、10.0.0.10(my lan ip)和自定义主机名进行了测试,没有任何作用
我没有主意,尝试了我能想到的一切
在具有php 7.2和默认配置的实时debian 9服务器上工作
在使用php 7.2和默认配置的本地debian 9服务器上不起作用
在具有相同apache / php版本的Windows上不起作用
在Mac上无法使用Apache 2.4和php 7.3,甚至不能在 session.cookie_secure = 0设置
检查了apache和php错误,没有错误
使用firefox的开发人员工具查看标题/ cookies
检查了我的代码,并确保它具有session_start()并且其他所有内容都是正确的
我什至尝试将安全标志设置为false手动设置cookie,然后在Set-Cookie标头中再次设置“安全”,这是代码:
setcookie("PHPSESSID", "7nhqdim7uu2viae7vhhf9os5ue", 0, "/", "", false, false);
这是我用于测试的代码:
<?php
session_start();
var_dump($_SESSION);
if(isset($_POST['submit']))
{
$_SESSION['value'] = $_POST['example'];
header('Location: /session.php'); // session.php is this file
}
if(isset($_SESSION['value']) && $_SESSION['value'] == 'example')
{
echo "value is " . $_SESSION['value'] . '<br>';
}
?>
<form method="post">
<input type="text" name="example" value="example">
<input type="submit" name="submit" value="submit">
</form>
答案 0 :(得分:0)
会话cookie需要第二级域,您不能为诸如com之类的顶级域(TLD)设置cookie,因为这将是一个安全问题。意味着任何带有.com
的网站都将允许该cookie,但这并不是一件好事。为localhost
设置cookie就像为com
或net
或org
设置cookie
要使其正常工作,您需要将Cookie设置为localhost.com
之类的内容,例如:
session_set_cookie_params(0, '/', 'localhost.com');
在主机文件中添加一个条目:
127.0.0.1 localhost.com
在MacOS上:
sudo vi /private/etc/hosts
在Windows上编辑此文件:
C:\Windows\System32\Drivers\etc\hosts
在Linux上:
sudo vi /etc/hosts
例如,最后在localhost.com
上运行您的应用程序(不使用Apache):
php -S localhost.com -t
然后使用.com在浏览器中打开:
http://localhost.com/yourapp
希望这会有所帮助。