我正在尝试在PHP中设置一个cookie,然后让我的JavaScript / jQuery读取它。正如我一直在努力研究这个问题,我看到有些人谈论服务器端与客户端cookie,而其他人说cookie只是cookie而且没有区别。我所知道的是PHP看到了cookie,而JavaScript却看不到。
这是构建页面并设置cookie的PHP文件的简化版本。
<!DOCTYPE html>
<?php
setcookie("card", "", time()+900, '/');
?>
<html>
<body>
<?php
$card = "a string I want in my cookie";
$_COOKIE['card'] = $card;
foreach($_COOKIE as $c => $c_value)
{
echo "Cookie named " . $c . " has value " . $c_value . "<br/>";
}
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js"></script>
<script type = "text/javascript" src = "script.js"></script>
</body>
</html>
这将在我的页面上正确显示cookie的名称和值。所以我知道我正在设置一些东西。
但是当我的JavaScript运行时,我似乎没有任何cookie。我尝试了几种不同的方法来获取所有cookie的值,或者只是cookie的单个目标部分:
var all_cookies = document.cookie;
var aCard = $.cookie('card');
all_cookies在调试时显示值为“”,而aCard只是保持未定义状态。
所以我需要用PHP设置不同的cookie吗?或者使用JavaScript或jQuery以不同的方式阅读它们?
答案 0 :(得分:1)
PHP的setcookie()
函数设置一个HTTP响应头,指示浏览器设置cookie。只有在尚未发送任何输出的情况下才可以执行此操作。在之后调用setcookie()
您已输出<!DOCTYPE
表示您应该收到“无法修改标题信息 - 标题已发送”警告。
要设置cookie并使其可用于Javascript,您需要在生成任何输出之前在脚本的最开头设置它:
<?php
$card = "a string I want in my cookie";
setcookie("card", $card, time()+900, '/');
// note from the manual (https://php.net/setcookie):
// Once the cookies have been set, they can be accessed
// on the next page load with the $_COOKIE array.
// ^^^^^^^^^^^^^^^^^^^^^
//
// so the "card" cookie won't be in $_COOKIE until
// the next page load. If you want it in there
// immediately, you need to set it manually:
$_COOKIE['card'] = $card;
?>
<!DOCTYPE html>
<html>
<body>
<?php
foreach($_COOKIE as $c => $c_value)
{
echo "Cookie named " . $c . " has value " . $c_value . "<br/>";
}
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js"></script>
<script type = "text/javascript" src = "script.js"></script>
</body>
</html>
既然您在生成任何输出之前已经使用过setcookie()
,那么Cookie设置正确,Javascript应该可以从document.cookie
轻松访问它。