未设置会话Cookie

时间:2019-07-09 08:18:00

标签: php session cookies

无法在本地计算机上使用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>

1 个答案:

答案 0 :(得分:0)

会话cookie需要第二级域,您不能为诸如com之类的顶级域(TLD)设置cookie,因为这将是一个安全问题。意味着任何带有.com的网站都将允许该cookie,但这并不是一件好事。为localhost设置cookie就像为comnetorg设置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

希望这会有所帮助。