Angular cookies 出现编码字符

12

给定一些数据:

$scope.devices = [
  { name: 'iPhone 4', os: 'iOS'},
  { name: 'Nexus 7', os: 'Android'},
];

还有一个设置cookie的函数:

$scope.saveDeviceChoice = function() {
  $cookieStore.put('savedDevice', $scope.deviceChoice.name);
}

我得到了一个值为%22Nexus%207%22的cookie,而不是我预期的Nexus 7。

在Web检查器中看起来像这样:

我真的感到困惑 - 似乎%22是引号,%20是空格,不知何故该值被“编码”保存。谁知道发生了什么?

2个回答

7

这里是关于$cookieStore的官方文档:

提供一个键值(字符串-对象)存储,由会话cookie支持。从该存储中获取或放置的对象将自动由Angular的toJson/fromJson序列化或反序列化。

然后存储会将值保存为URL编码版本。请查看this article,其中有一节解释了cookie编码。


当从后端读取cookie时,必须将其解码才能使用,这真是一件痛苦的事情。 - Geomorillo

4

$cookieStore.(get/put) 会自动将您发送的值转换为 Json 格式,并添加编码后的字符。

如果您只使用 $cookies,那么您可以将参数设置如下:

$cookies['savedDevice'] = $scope.deviceChoice.name;

或者

$cookies.savedDevice = $scope.deviceChoice.name;

无论哪种方式,这些值都会按照您的意愿进行保存。
使用$cookieStore很受欢迎,但如果您想在服务器上使用这些值,则会带来自己的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接