10

我正在通过响应从服务器写入一个 cookie,这很好,问题是当我尝试使用 angularJs $cookieStore.get() 读取相同的 cookie 时,总是返回“未定义”,我已经使用 chrome 和开发人员工具进行了调试饼干在那里,

console.log($cookieStore.get("r"));

$cookieStore 似乎已注入并运行正常,我只是想知道为什么 angularJs 无法读取 cookie。

r:未定义

在此处输入图像描述

编辑:

我尝试使用 $cookies 服务,但我也没有定义。

我在服务器端发送 cookie 没有任何问题,我在 chrome 开发人员工具中获取 cookie

我正在使用服务堆栈,代码如下:

public override object Logout(IServiceBase service, ServiceStack.ServiceInterface.Auth.Auth request)
        {
            var resp = service.RequestContext.Get<IHttpResponse>();
            resp.Cookies.AddCookie(new Cookie { Name = "r", Path = "/", Value = "from server", HttpOnly = false, Discard = false, Expires = DateTime.Now.AddHours(12) });
            return base.Logout(service, request);
        }
4

2 回答 2

7

我认为$cookieStore它只能单独使用,'r'是否设置在其他地方?文档说它提供了一个由 cookie 支持的键/值存储,而不是直接访问 cookie。当我将 'myValue' 设置为 'jason' 时,它会存储%22jason%22 (fiddle)。这意味着您可以根据需要为 javascript 对象设置值,并且 cookieStore 将为您序列化和反序列化它们。

在此处输入图像描述

尝试使用$cookies您可以只设置属性并且不编码值的地方(小提琴)

在此处输入图像描述

    $scope.setValue = function() {
        $cookieStore.put("myValue", $scope.value);
    };

    $scope.getValue = function() {
        $scope.value = $cookieStore.get('myValue');
    };

    $scope.setCookieValue = function() {
        $cookies.otherValue = $scope.value;
    };

    $scope.getCookieValue = function() {
        $scope.value = $cookies.otherValue;
    };
于 2013-10-16T06:03:42.947 回答
6

是的,@Pedro 在 .NET 中是正确的,例如,在默认情况下使用 HttpCookie 进行身份验证时,属性 HttpOnly 为 true,并且在 javscript -> document.cookie 中找不到您刚刚保存到浏览器的 cookie。

通过在保存 cookie 时设置为 false HttpOnly 对我有用。

于 2014-03-14T12:32:41.567 回答