即使在浏览器关闭/重启后使用Angular.js也可以使cookie保持不变

时间:2014-01-10 13:46:40

标签: javascript angularjs cookies asp.net-web-api

我正在为我的项目使用Angular,并遇到了身份验证问题。在成功身份验证用户从服务器上检索令牌,并且由于长用户拥有此令牌,他可以访问他需要身份验证的所有地方(我认为这是最好的方法,因为我使用MVC Web API作为后端,我没有会话)。一切正常,直到我关闭我的浏览器,再次启动它$ cookieStore和$ cookies在重启后是空的。

有没有人知道如何制作cookie,或者有更聪明的方法吗?

我创建了一个带有testview的测试控制器,其中我有2个按钮设置并加载$ cookie,然后重新启动它工作,如果我打开一个新窗口,而另一个仍然是它的工作,但我尽快关闭一切下来,coockies是空的。

    $scope.Set = function () {

    $scope.LoadedData = "test";
    $cookies.myFavorite = 'oatmeal';

}


$scope.Load = function () {

    var b = $cookies.myFavorite;
    console.log("testasdasd" + $cookies);

    $scope.LoadedData = $cookies.myFavorite;

}

2 个答案:

答案 0 :(得分:3)

有两种类型的Cookie:会话cookie和持久性cookie。

  • 会话cookie在内存中,只有在您关闭浏览器之后才会存在。
  • 持久性Cookie将保存到光盘中,并将根据Expires属性过期。

将cookie保存为会话或持久性的决定是服务器端,而不是客户端javascript。

使用.NET Forms身份验证时,可以使用FormsAuthentication.GetAuthCookie创建cookie,第二个参数确定这是会话还是持久cookie。

答案 1 :(得分:1)

我知道这个问题已经得到解答,但实际上你可以管理cookie持久性客户端。只需$cookieStore

持久Cookie:

// from your controller
$cookieStore.put('auth_token', token);
// in your module
$http.defaults.headers.common.Authorization = $cookieStore.get('auth_token');

在模块中,我们告诉角色我们想要在每次加载我们网站的任何页面时使用此会话。

编辑:您可能对HTML5 localstorage感兴趣而非Cookie。