[英]AngularJS $cookies are not persisting
我有一個記住用戶名功能的登錄表單。 他們所做的只是勾選方框,並通過以下方式保存cookie:
$scope.toggleCookie = function()
{
//-- $scope.remember is the model for the checkbox
$cookieStore.put('remember', $scope.remember);
if (!$scope.remember) $cookieStore.remove('email');
}
當用戶返回登錄頁面時,首先我檢查remember
cookie:
$scope.remember = ($cookieStore.get('remember') == null || $cookieStore.get('remember') == false) ? false : true;
然后我檢查email
cookie中是否有值:
$scope.email = ($cookieStore.get('email') != null) ? $cookieStore.get('email') : '';
現在以上所有工作正常,我可以登錄檢查,注銷,我可以在輸入字段中看到我的用戶名。 如果我取消選中它,登錄並注銷,用戶名就會消失。
我也可以在chrome dev工具的resources-> cookies選項卡中看到這種情況。
我可以刷新頁面,但是,當檢查時,用戶名就在那里。
我的問題是,當我關閉chrome時,重新打開它,所有cookie數據都消失了。 為什么是這樣? 我沒有太多使用cookies的經驗。
在Angular v1.4中,您最終可以為cookie設置一些選項。 這是一個非常簡單的例子:
var now = new $window.Date(),
// this will set the expiration to 6 months
exp = new $window.Date(now.getFullYear(), now.getMonth()+6, now.getDate());
$cookies.put('yourCookie','blabla',{
expires: exp
});
var cookie = $cookies.get('yourCookie');
console.log(cookie); // logs 'blabla'
如果您在運行此代碼后檢查您的cookie,您將看到過期將正確設置為名為yourCookie
的cookie。
作為第三個參數傳遞給上面的put
函數的對象也允許其他選項,例如設置path
, domain
和secure
。 查看文檔以獲取概述。
要使cookie在瀏覽器會話上保持持久性,應設置到期日期。 不幸的是,angularjs $ cookie服務似乎不支持這一點。 請參閱此文章: AngularJS - 如何在AngularJS中設置cookie的到期日期
所以它似乎是導致問題的到期。 從AngularJS 1.2.19開始,您無法通過$cookie
或$cookieStore
設置到期日期。
為了解決這個問題,我使用了本地存儲。 我使用此模塊可以輕松訪問本地存儲: https : //github.com/grevory/angular-local-storage
改變是非常輕松的。 我更改了$cookieStore.get('remember');
到localStorageService.get('remember');
所以你可以看到它們共享方法名稱。 它不是put
,而是add
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.