不使用ngCookies存储Cookie

时间:2016-07-22 18:46:20

标签: javascript angularjs cookies

我正在使用AngularJS 1.5.0,我尝试使用$cookies。我也尝试过使用文档中的示例代码但是它没有用,我得到了put() is not a function

这是LoginController,它应该在成功登录后将令牌保存到cookie。

.success(function (response) {
   $cookies["token"] = response.value.token;
   $log.info("Token: " + $cookies["token"]);
});

我在控制台中获得了适当的价值,但如果我转到另一个页面并尝试从cookie中获取该值,我将获得undefined

MainController

中阅读Cookie
 $log.info('New token:' + $cookies["token"]);

我检查了浏览器设置,并且没有来自localhost的任何cookie(我检查了Safari和Chrome)

2 个答案:

答案 0 :(得分:1)

您是否尝试过查看Cookie是否实际设置? https://support.google.com/chrome/answer/95647?co=GENIE.Platform%3DDesktop&hl=en

如果您在设置cookie时一度设置了“httpOnly”标志,那么您的cookie确实已经设置好了,但是您无法从客户端javascript中读取它。您可以设置它,覆盖它,但除非您从服务器端读取cookie标头,否则您将无法读取它。当谈到加强安全性时,这实际上非常酷......但如果您没有意识到首先设置该标志的含义,那么可能会非常头疼。

如果您可以在浏览器的设置中看到cookie,但无法在未获得“未定义”的情况下将其打印到控制台......那么只需删除它并重置它而不使用“httpOnly”标记。

答案 1 :(得分:0)

$ cookies公开您需要使用的方法。您没有在$ cookies对象上设置属性。

例如:

$cookies.put('keyHere', 'valueHere'); // set
$cookies.get('keyHere'); // get
$cookies.putObject('key2Here', {val: "etc"}); // set
$cookies.getObject('key2Here'); // get

因此,在您的情况下,假设令牌是一个字符串,您的成功函数将执行以下操作:

function (response) {
   $cookies.put("token", response.value.token);
}

您可能一直在阅读较旧的文档,因为$cookies功能在角度版本1.3之后发生了变化。但我提到的方式是它应该如何为你工作,因为你使用角1.5。 Source