【发布时间】:2019-01-23 03:58:53
【问题描述】:
我在本地主机上。已经对 localhost 上的 cookie 和会话进行了很多讨论。但是,我的情况似乎很特殊。我尝试过以不同的方式设置 cookie,但似乎都不起作用,即使 $_SESSION 数组在设置会话变量后仍然为空。我尝试了以下组合在本地主机上设置 cookie:
setcookie("name", "value")setcookie("name", "value", 0)setcookie("name", "value", 0, "/", false)setcookie("name", "value", time()+86000, "/", false)setcookie("name", "value", time()+86000)setcookie("name", "value", time()+86000, ".localhost.com")setcookie("name", "value", time()+86000, "localhost.com")setcookie("name", "value", time()+86000, "localhost")setcookie("name", "value", 0, "/", ".localhost.com")setcookie("name", "value", 0, "/", ".localhost.com", false, false)setcookie("name", "value", 0, "/", "localhost")setcookie("name", "value", 0, "/", "localhost.com", false, false)setcookie("name", "value", 0, "/", "localhost.com")
我还在 PHP.ini 文件中编辑了会话 cookie 值,以反映我对 setcookie 的徒劳尝试。我还尝试将所有尝试的路径从“/”更改为“/user”。
我在 Apache 2.4.33 上使用 PHP 7.1,并将“localhost.com”配置为指向服务器文档根目录上的目录“/app_support”。我还将“app.localhost.com”配置为指向“/subdomains/app”目录,该目录也位于服务器的根目录上。我通过“app.localhost.com”访问我的网站,然后使用 AJAX 访问“localhost.com/user”。在“localhost.com/user”目录中,我有“user.php”,这是一个包含 User 类的文件,用于登录和设置 cookie。
我已经在 Firefox 60 中验证了为我的自定义 cookie 以及会话 cookie 发送的 cookie 标头,因此很明显是浏览器出于某种原因拒绝了它们。我在 Chrome 68 和 Chromium 66 中得到了相同的结果。
编辑:这是我设置 cookie 的部分。
session_regenerate_id();
$_SESSION['user']['id'] = $user['investor_id'];
$_SESSION['user']['surname'] = $user['surname'];
$_SESSION['user']['name'] = $user['given_name'];
$_SESSION['user']['email'] = $user['email'];
$selector = $this->generateCode(9);
$authenticator = $this->generateCode(33);
$expiry = time() + 2592000;
setcookie("logged_in", $selector.':'.$authenticator, $expiry, '/', '.localhost.com');
编辑 2:在 Firefox 上,以下是收到的 cookie 标头:
logged_in
domain .localhost.com
expires 2018-09-15T08:35:07.000Z
path /
value F668B2928:417076134356498468FDA03D496336BDA
PHPSESSID
domain localhost.com
httpOnly true
path /user
value 77h432cjgu25mrnauktnc6s471
【问题讨论】:
-
你能添加剩余的代码吗?
-
@E141 还有哪些代码?
-
认为查看
user.php和您提到的课程可能有用吗? -
我们需要查看设置 cookie 的脚本。您确实记得必须在脚本的任何其他输出之前发送 cookie,不是吗
-
@RamRaider
user.php有几千行。但是,该类中的所有内容都按预期工作(连接到数据库、获取用户信息、验证信息然后登录用户)。我将在问题中添加我设置 cookie 的相关部分(使用setcookie和$_SESSION)。