73
  1. 我們希望將用戶的授權信息存儲在Cookie中,在瀏覽器刷新(F5)時不會丟失。如何在AngularJS中設置cookie的到期日期

  2. 如果用戶在登錄時選擇了「記住我」複選框,我們希望將授權信息存儲在「永久cookie」中。

+2

暫時我使用本地存儲和會話存儲用於此目的的參考HTTP設置一些額外的選項,比如天數。 com/shwetankd/external/demos/webstorage_demo.htm –

回答

1

正如@文森特 - briglia pointed out,有一個jQuery下降,在直到$cookie服務變得配置可作爲一種變通方法 - check it out here

32

爲1.4: 正如評論指出這裏和其他人以下,爲1.4,角的原生支持cookie現在提供了編輯Cookie的功能:

由於38fbe3ee,$餅乾將不再公開該 表示當前瀏覽器cooki性質e值。 $ cookie不再調查 瀏覽器對cookie的更改,不再將cookie的值 複製到$ cookies對象上。

這是改變,因爲投票是昂貴的,造成的問題 與$餅乾性能不符合 實際瀏覽器cookie值正確同步(原因輪詢原是 添加是允許不同的選項卡之間的通信,但有。是 更好的方法來做到這一點今天,例如localStorage的)

新的API上$餅乾如下:

得到放的getObject putObject GETALL刪除您必須顯式地使用 以上方法,以獲取鴣鴣聲kie數據。這也意味着您 不能再觀看$ cookie上的屬性來檢測瀏覽器cookie上發生的 更改。

此功能通常只需要第三方庫 在運行時以編程方式更改cookie。如果您依賴此 那麼您必須編寫能夠對第三方庫作出反應的代碼,以便對cookie進行更改或實施您自己的輪詢 機制。

實際執行是通過$cookiesProvider對象完成的,該對象可以通過put調用傳遞。

1.3及以下: 對於那些你們誰做你最好的,以避免加載jQuery插件,這似乎是一個不錯的替代品角 - https://github.com/ivpusic/angular-cookie

+0

使用Angular 1.3或更低版本的最佳解決方案。如果'{'expires':expireDate});'或..............................,則文檔中不太清楚 – vegemite4me

3

你可以去angular.js腳本和改變插入的cookie
搜索self.cookies = function(name, value) { 然後ü可以改變,增加了例如餅乾7天

if (value === undefined) { 
    rawDocument.cookie = escape(name) + "=;path=" + cookiePath + 
          ";expires=Thu, 01 Jan 1970 00:00:00 GMT"; 
    } else { 
    if (isString(value)) { 
     var now = new Date(); 
     var time = now.getTime(); 
     time += 24*60*60*1000*7; 
     now.setTime(time); 
     cookieLength = (rawDocument.cookie = escape(name) + '=' + escape(value) + 
       ';path=' + cookiePath+";expires="+now.toGMTString()).length + 1 
2

我知道這個問題是有點老了,已經有一個公認的代碼回答。

但仍然是一個現在的問題,我正在努力(不涉及jQuery或純Javascript)。

於是,經過一番研究,我發現這一點: https://github.com/ivpusic/angular-cookie

它提供了一個「接口」神似$的CookieStore。並允許配置到期日期(值和單位)。

關於在到期日以$餅乾或$的CookieStore角的原生支持,「他們」對1.4這個問題的承諾更新,看看這個:https://github.com/angular/angular.js/pull/10530

將有可能設置有效期限與$的CookieStore .put(...),至少他們提出...

編輯:我遇到了一個「問題」,你不能混合$ cookie與角-cookie模塊。因此,如果您使用ipCookie(...)設置cookie,則可以用ipCookie(...)檢索它,因爲使用$ cookie它將返回undefined

25

在Angular v1.4中,您可以終於爲設置了一些cookies選項,例如到期。這裏是一個非常簡單的例子:

var now = new Date(), 
    // this will set the expiration to 12 months 
    exp = new Date(now.getFullYear()+1, now.getMonth(), now.getDate()); 

$cookies.put('someToken','blabla',{ 
    expires: exp 
}); 

var cookie = $cookies.get('someToken'); 
console.log(cookie); // logs 'blabla' 

如果您運行此代碼,你會看到,過期將被正確設置爲名爲someToken餅乾後檢查您的Cookie。上述

作爲第三PARAM到put功能傳遞的對象允許其他選項,以及,諸如設置pathdomainsecure。查看the docs以獲得總覽。

PS - 作爲一個側面說明,如果你正在升級記住,$cookieStore已被棄用,因此現在$cookies是對付餅乾的唯一方法。看到docs

37

這可能是在1.4.0構建的角度使用ngCookies模塊:

https://docs.angularjs.org/api/ngCookies/service/$cookies

angular.module('cookiesExample', ['ngCookies']) 
.controller('ExampleController', ['$cookies', function($cookies) { 
    // Find tomorrow's date. 
    var expireDate = new Date(); 
    expireDate.setDate(expireDate.getDate() + 1); 
    // Setting a cookie 
    $cookies.put('myFavorite', 'oatmeal', {'expires': expireDate}); 
}]); 
+2

........................'[{'expires':expireDate}]);'應該使用格式... – Serge

9

我想提出一個額外的例子如一些人知道的額外時間cookies的一生。即。他們希望將cookie設置爲持續10分鐘或1天。

通常你已經知道cookie會在幾秒鐘內持續多久。

var today = new Date(); 
    var expiresValue = new Date(today); 

    //Set 'expires' option in 1 minute 
    expiresValue.setMinutes(today.getMinutes() + 1); 

    //Set 'expires' option in 2 hours 
    expiresValue.setMinutes(today.getMinutes() + 120); 


    //Set 'expires' option in (60 x 60) seconds = 1 hour 
    expiresValue.setSeconds(today.getSeconds() + 3600); 

    //Set 'expires' option in (12 x 60 x 60) = 43200 seconds = 12 hours 
    expiresValue.setSeconds(today.getSeconds() + 43200); 

    $cookies.putObject('myCookiesName', 'myCookiesValue', {'expires' : expiresValue}); 

,你可以找回像往常一樣:

var myCookiesValue = $cookies.getObject('myCookiesName'); 

如果爲空,則返回undefined。

鏈接;

http://www.w3schools.com/jsref/jsref_obj_date.asp
https://docs.angularjs.org/api/ngCookies/provider/ $ cookiesProvider#默認

+0

'today'來自? –

+0

我試圖讓代碼更好,並忘記將所有'現在改爲今天。現在應該沒問題。 –

0

您可以使用https://github.com/ivpusic/angular-cookie

首先你需要注入ipCookie到您的角度模塊。

var myApp = angular.module('myApp', ['ipCookie']); 

而現在,例如,如果你想使用它從你的控制器

myApp.controller('cookieController', ['$scope', 'ipCookie', function($scope, ipCookie) { 
    // your code here 
}]); 

要創建一個cookie的使用

ipCookie(key, value); 

值支持字符串,數字,布爾值,數組和對象,並會自動序列化到cookie中。 //people.opera:

你也可以當一個cookie過期

ipCookie(key, value, { expires: 21 }); 
相關問題