【发布时间】:2018-03-20 05:44:50
【问题描述】:
我正在尝试在 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 以不同的方式阅读它们?
【问题讨论】:
-
检查该页面的请求,看看它是否有标题“HttpOnly”。
-
服务器端和客户端技术都可以读取cookie,但cookie被标记为httponly。也许你有一些设置使cookies httponly 例如
php_flag session.cookie_httponly onin.htaccess -
您正在使用 setcookie 设置一个空值。分配给超级全局 $_COOKIE 对客户端没有影响。事实上,分配 any 超级全局应该是没有必要的。
标签: javascript php jquery cookies