javascript - example - ngx-cookie-service




如何在AngularJS中設置Cookie的到期日期 (6)

在Angular v1.4中,您最終可以為cookie設置一些選項,例如過期。 這是一個非常簡單的例子:

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'

如果您在運行此代碼後檢查您的Cookie,您將看到過期將被正確設置為名為someToken的Cookie。

作為上述put函數的第三個參數傳遞的對像也允許其他選項,例如設置pathdomainsecure 。 查看$cookiesProvider以獲得概述。

PS - 作為一個方面說明,如果您正在升級介意$cookieStore已被棄用,所以$cookies現在是處理cookie的唯一方法。 請參閱docs

  1. 我們希望將用戶的授權信息存儲在瀏覽器刷新(F5)時不應丟失的cookie中。

  2. 我們希望將授權信息存儲在“永久cookie”中,以防用戶在登錄時選擇“記住我”複選框。


對於1.4:如下面的評論和下面的註釋中所述,從1.4開始,Angular的原生cookie支持現在提供了編輯cookie的能力:

由於38fbe3ee,$ cookie將不再公開表示當前瀏覽器cookie值的屬性。 $ cookies不再調查瀏覽器對cookie的更改,也不再將cookie值複製到$ cookie對像中。

這是因為輪詢很昂貴,並導致$ cookie屬性與實際瀏覽器cookie值無法正確同步的問題(輪詢最初添加的原因是為了允許不同標籤之間的通信,但今天有更好的方法來做到這一點例如localStorage。)

$ cookie上的新API如下:

get put getObject putObject getAll remove你必須明確地使用上面的方法來訪問cookie數據。 這也意味著您不能再觀看$ cookie上的屬性來檢測瀏覽器cookie上發生的更改。

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

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

對於1.3及以下版本:對於那些盡力避免加載jQuery插件的人,這似乎是角度的一個很好的替代 - https://github.com/ivpusic/angular-cookie


您可以轉到angular.js腳本並更改插入cookie
搜索self.cookies = function(name, value) {然後你可以改變添加cookie的代碼,例如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

我想提出一個額外的例子,因為有些人知道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#defaults


正如@ vincent-briglia 指出的那樣 ,有一個jQuery插件可以用作解決方法,直到$cookie服務變得可配置為止 - 在此處查看


這在使用ngCookies模塊的1.4.0版本的角度中是可能的:

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});
}]);




angular-cookies