Câu hỏi Cách đặt ngày hết hạn cho cookie trong AngularJS


  1. Chúng tôi muốn lưu trữ thông tin Ủy quyền của Người dùng trong cookie mà không bị mất khi làm mới (F5) trình duyệt.

  2. Chúng tôi muốn lưu trữ thông tin ủy quyền trong "cookie cố định" trong trường hợp người dùng đã chọn hộp kiểm "Nhớ thông tin đăng nhập của tôi" tại thời điểm đăng nhập.


76
2017-09-27 14:51


gốc


Hiện tại, tôi đang sử dụng bộ nhớ cục bộ và bộ nhớ phiên cho mục đích này people.opera.com/shwetankd/external/demos/webstorage_demo.htm - Sutikshan Dubey


Các câu trả lời:


Điều này là có thể trong việc xây dựng góc nghiêng 1.4.0 bằng cách sử dụng ngCookies module:

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

39
2018-03-13 13:20



không rõ ràng từ tài liệu nếu {'expires': expireDate}); hoặc là ................................................. ..... [{'expires': expireDate}]); định dạng nên được sử dụng ... - Serge
Tài liệu $ cookies.put (key, value, [options]) 's [] là một chú thích cho "tùy chọn". Nó không có nghĩa là mảng !!! Trong thực tế, họ nói "tùy chọn" là một đối tượng {a: x, b: y, c: z} nếu bạn đọc lại tài liệu. - Jenna Leaf


Đối với 1,4: Như đã lưu ý trong bình luận ở đây và những người khác dưới đây, kể từ 1.4, hỗ trợ cookie gốc của Angular giờ đây cung cấp khả năng chỉnh sửa cookie:

Do 38fbe3ee, $ cookie sẽ không còn hiển thị các thuộc tính nữa   đại diện cho các giá trị cookie trình duyệt hiện tại. $ cookie không còn cuộc thăm dò ý kiến   trình duyệt để thay đổi cookie và không còn sao chép cookie   giá trị lên đối tượng $ cookie.

Điều này đã được thay đổi bởi vì bỏ phiếu là tốn kém và gây ra vấn đề   với các thuộc tính $ cookie không đồng bộ hóa chính xác với   giá trị cookie của trình duyệt thực tế (Lý do cuộc thăm dò ý kiến ​​ban đầu   được thêm vào là cho phép liên lạc giữa các tab khác nhau, nhưng có   cách tốt hơn để làm điều này ngày hôm nay, ví dụ localStorage.)

API mới trên cookie $ như sau:

get put getObject putObject getAll remove Bạn phải sử dụng explictly   phương pháp trên để truy cập dữ liệu cookie. Điều này cũng có nghĩa là bạn   không còn có thể xem các thuộc tính trên $ cookie để phát hiện các thay đổi   xảy ra trên các cookie của trình duyệt.

Tính năng này thường chỉ cần nếu thư viện của bên thứ 3 là   thay đổi lập trình các cookie trong thời gian chạy. Nếu bạn dựa vào điều này   thì bạn phải viết mã có thể phản ứng với bên thứ 3   thư viện thực hiện các thay đổi đối với cookie hoặc thực hiện bỏ phiếu của riêng bạn   cơ chế.

Việc triển khai thực tế được thực hiện thông qua $ cookiesProvider đối tượng, có thể được truyền qua put gọi điện.

Đối với 1,3 và dưới đây: Đối với những người bạn của những người đã làm tốt nhất của bạn để tránh phải tải jQuery plugin, điều này dường như là một sự thay thế tốt đẹp cho góc - https://github.com/ivpusic/angular-cookie


32
2017-12-14 02:56



Giải pháp tuyệt vời khi sử dụng Angular 1.3 hoặc thấp hơn. - vegemite4me


Trong Angular v1.4 bạn có thể cuối cùng đặt một số tùy chọn cho cookie, chẳng hạn như hết hạn. Đây là một ví dụ rất đơn giản:

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'

Nếu bạn kiểm tra cookie của mình sau khi chạy mã này, bạn sẽ thấy rằng thời gian hết hạn sẽ được đặt chính xác thành cookie có tên someToken.

Đối tượng được truyền dưới dạng tham số thứ ba cho put chức năng ở trên cũng cho phép các tùy chọn khác, chẳng hạn như cài đặt path, domain và secure. Kiểm tra tài liệu để biết tổng quan.

PS - Là một lưu ý phụ nếu bạn đang nâng cấp tâm trí $cookieStore đã không được chấp nhận, vì vậy $cookies hiện là phương pháp duy nhất để xử lý cookie. xem tài liệu


26
2018-03-04 12:44





Tôi muốn trình bày một ví dụ bổ sung vì một số người biết thời lượng bổ sung của cookie suốt đời. I E. Họ muốn đặt cookie để kéo dài thêm 10 phút hoặc thêm 1 ngày nữa.

Thông thường bạn đã biết cookie sẽ tồn tại trong vài giây nữa.

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

và bạn có thể truy xuất nó như bình thường:

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

Nếu trống, nó sẽ trả về không xác định.

Liên kết;

http://www.w3schools.com/jsref/jsref_obj_date.asp 
https://docs.angularjs.org/api/ngCookies/provider/$ cookiesProvider # mặc định


9
2017-09-09 11:08



Nơi nào today đến từ? - Thomas Kekeisen
Tôi đã cố gắng làm cho mã đẹp hơn và quên thay đổi tất cả 'hiện tại thành hôm nay. Bây giờ nó sẽ ổn thôi. - Andreas Panagiotidis


Bạn có thể truy cập tập lệnh angular.js và thay đổi cookie chèn
tìm kiếm self.cookies = function(name, value) { sau đó bạn có thể thay đổi mã để thêm cookie ví dụ trong 7 ngày

 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

3
2017-09-07 12:45





Tôi biết rằng câu hỏi này là một chút cũ, và đã có một câu trả lời được chấp nhận.

Nhưng vẫn còn một vấn đề hiện tại mà tôi đang đấu tranh với (không liên quan đến jQuery hoặc Javascript thuần túy).

Vì vậy, sau khi một số nghiên cứu tôi đã tìm thấy điều này: https://github.com/ivpusic/angular-cookie

Trong đó cung cấp một "giao diện" khá giống với $ cookieStore. Và giấy phép để cấu hình ngày hết hạn (giá trị và đơn vị).

Về hỗ trợ gốc góc cạnh vào ngày hết hạn với $ cookie hoặc $ cookieStore, "họ" hứa hẹn cập nhật về chủ đề này vào ngày 1.4, hãy xem xét vấn đề này: https://github.com/angular/angular.js/pull/10530

Nó sẽ có thể thiết lập ngày hết hạn với $ cookieStore.put (...), ít nhất họ đề xuất rằng ...

CHỈNH SỬA: Tôi gặp phải một "vấn đề", bạn không thể kết hợp các cookie $ với mô đun cookie góc. Vì vậy, nếu bạn đặt cookie vớiipCookie(...) lấy nó với ipCookie(...) bởi vì với $ cookie nó sẽ trở lại undefined.


2
2018-02-05 22:56





Như vincent-briglia chỉ ra, có một jQuery thả vào có thể được sử dụng như một giải pháp cho đến khi $cookie dịch vụ trở thành cấu hình - kiểm tra nó ra ở đây


1
2017-09-20 16:19





Bạn có thể sử dụng https://github.com/ivpusic/angular-cookie

Trước tiên, bạn cần phải tiêm ipCookie vào mô-đun góc của bạn.

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

Và bây giờ, ví dụ nếu bạn muốn sử dụng nó từ bộ điều khiển của bạn

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

Để tạo sử dụng cookie

ipCookie(key, value);

Giá trị này hỗ trợ chuỗi, số, boolean, mảng và đối tượng và sẽ được tự động tuần tự hóa vào cookie.

Bạn cũng có thể đặt một số tùy chọn bổ sung, như số ngày khi cookie hết hạn

ipCookie(key, value, { expires: 21 });

0
2017-11-06 16:01