AngularJS में कुकी के लिए समाप्ति तिथि कैसे निर्धारित करें


81
  1. हम कुकी में उपयोगकर्ता की प्राधिकरण जानकारी संग्रहीत करना चाहते हैं जिसे ब्राउज़र के ताज़ा (F5) पर खोना नहीं चाहिए।

  2. हम प्राधिकरण जानकारी को "स्थायी-कुकी" में संग्रहीत करना चाहते हैं, जब उपयोगकर्ता ने लॉग-ऑन के समय "रिमेम्बर मी" चेक बॉक्स चुना है।


2
समय के लिए मैं इस उद्देश्य के लिए स्थानीय भंडारण और सत्र भंडारण का उपयोग कर रहा रेफरी people.opera.com/shwetankd/external/demos/webstorage_demo.htm
आनंद

जवाबों:


46

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

2
प्रलेखन से बहुत स्पष्ट नहीं है अगर {'expires': expireDate});या .............................................. ............ [{'expires': expireDate}]);प्रारूप का उपयोग किया जाना चाहिए ...
सर्ज

2
प्रलेखन $ कुकीज़.पुट (कुंजी, मूल्य, [विकल्प]) का [] "वैकल्पिक" के लिए एक एनोटेशन है। इसका मतलब सरणी नहीं है !!! वास्तव में, उन्होंने कहा कि "विकल्प" एक वस्तु है {a: x, b: y, c: z} यदि आप फिर से प्रलेखन पढ़ते हैं।
जेना पत्ती

32

1.4 के लिए: जैसा कि यहां और अन्य नीचे टिप्पणी में बताया गया है, 1.4 के रूप में, कोणीय के मूल कुकी समर्थन अब कुकीज़ को संपादित करने की क्षमता प्रदान करता है:

38fbe3ee के कारण, $ कुकीज वर्तमान ब्राउज़र कुकी मानों का प्रतिनिधित्व करने वाले गुणों को उजागर नहीं करेगी। $ कुकीज अब कुकीज़ में परिवर्तन के लिए ब्राउज़र को प्रदूषित नहीं करता है और अब कुकी कुकीज़ को $ कुकीज़ ऑब्जेक्ट पर कॉपी नहीं करता है।

यह बदल दिया गया था क्योंकि मतदान महंगा है और वास्तविक कुकीज़ कुकी मूल्यों के साथ सही ढंग से सिंक्रनाइज़ नहीं होने के कारण $ कुकीज़ गुणों के साथ समस्याएँ हैं (मूल रूप से मतदान को जोड़ने का कारण अलग-अलग टैब के बीच संचार की अनुमति देना था, लेकिन आज ऐसा करने के बेहतर तरीके हैं , उदाहरण के लिए लोकलस्टोरेज।)

$ कुकीज़ पर नया एपीआई इस प्रकार है:

Get getbbject putObject getObject getAll remove आपको कुकी डेटा तक पहुंचने के लिए ऊपर दिए गए तरीकों का आसानी से उपयोग करना चाहिए। इसका अर्थ यह भी है कि अब आप ब्राउज़र कुकीज़ पर होने वाले परिवर्तनों का पता लगाने के लिए $ कुकीज़ पर गुण नहीं देख सकते हैं।

यह सुविधा आम तौर पर केवल तब आवश्यक होती है जब कोई 3 पार्टी लाइब्रेरी प्रोग्रामेटिक रूप से रनटाइम पर कुकीज़ बदल रही हो। यदि आप इस पर भरोसा करते हैं तो आपको या तो कोड लिखना होगा जो कि 3 जी पार्टी लाइब्रेरी पर प्रतिक्रिया कर सकता है जो कुकीज़ में परिवर्तन कर सकता है या आपके स्वयं के मतदान तंत्र को लागू कर सकता है।

वास्तविक कार्यान्वयन एक $ कुकीज़प्रॉइडर ऑब्जेक्ट के माध्यम से किया जाता है , जिसे putकॉल के माध्यम से पारित किया जा सकता है ।

1.3 और नीचे के लिए: आपमें से जिन्होंने jQuery प्लगइन्स लोड करने से बचने के लिए अपना सर्वश्रेष्ठ प्रदर्शन किया है, यह कोणीय के लिए एक अच्छा प्रतिस्थापन प्रतीत होता है - https://github.com/ivpusic/angular-cookie


कोणीय 1.3 या उससे कम का उपयोग करते समय महान समाधान।
vegemite4me

27

कोणीय v1.4 में आप अंत में कुकीज़ के लिए कुछ विकल्प निर्धारित कर सकते हैं, जैसे कि समाप्ति। यहाँ एक बहुत ही सरल उदाहरण दिया गया है:

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

putऊपर दिए गए फ़ंक्शन के लिए तीसरे पैराम के रूप में पारित ऑब्जेक्ट अन्य विकल्पों के लिए भी अनुमति देता है, जैसे कि सेटिंग path, domainऔर secure। अवलोकन के लिए डॉक्स की जाँच करें।

PS - एक साइड नोट के रूप में यदि आप मन को अपग्रेड कर रहे हैं $cookieStore, तो $cookiesकुकीज़ से निपटने का एकमात्र तरीका है। डॉक्स देखें


15

मैं एक अतिरिक्त उदाहरण प्रस्तुत करना चाहूंगा क्योंकि कुछ लोग कुकीज़ की अतिरिक्त अवधि को जीवन भर जानते हैं। अर्थात। वे कुकी को अंतिम 10 मिनट या 1 और दिन सेट करना चाहते हैं।

आमतौर पर आप पहले से ही जानते हैं कि कुकी सेकंड में कितनी देर तक चलेगी।

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

यदि खाली है, तो यह अपरिभाषित है।

लिंक;

http://www.w3schools.com/jsref/jsref_obj_date.asp
https://docs.angularjs.org/api/ngCookies/provider/ $ कुकीज़


1
कहाँ todayसे आता है?
थॉमस केकेसेन

मैंने कोड को अच्छा बनाने की कोशिश की और अब 'आज तक' को बदलना भूल गया। अब यह ठीक होना चाहिए।
एंड्रियास पनियागोटिडिस

मेरा एक सवाल है। जब मुझे कुकी से मूल्य मिलता है, तो क्या मुझे इसकी समाप्ति तिथि की जांच करनी चाहिए या $cookiesयदि मूल्य समाप्त हो गया है तो स्वचालित रूप से अपरिभाषित रिटर्न?
हदी.मानसौरी

3

आप कोणीय.जेएस स्क्रिप्ट पर जा सकते हैं और फिर यू के
लिए इंसर्ट कुकी खोज 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 या शुद्ध जावास्क्रिप्ट के बारे में नहीं) के साथ संघर्ष कर रहा हूँ।

इसलिए, कुछ शोध के बाद मुझे यह पता चला है: https://github.com/ivpusic/angular-cookie

जो $ कुकीज के समान "इंटरफ़ेस" प्रदान करता है। और समाप्ति तिथि (मूल्य और इकाइयों) को कॉन्फ़िगर करने की अनुमति देता है।

$ कुकी या $ कुकी के साथ समाप्ति तिथि पर कोणीय मूल समर्थन के बारे में, "वे" इस विषय पर 1.4 पर अपडेट का वादा करते हैं, इस पर गौर करें: https://github.com/angular/angular.js/pull/10530

यह संभव हो जाएगा समाप्ति की तारीख $ cookieStore.put (...) के साथ, कम से कम वे प्रस्ताव करते हैं कि ...

संपादित करें: मुझे एक "समस्या" का सामना करना पड़ा है आप कोणीय-कुकी मॉड्यूलर के साथ $ कुकीज़ नहीं मिला सकते हैं। इसलिए यदि आप एक कुकी सेट करते हैं, तो ipCookie(...)इसे पुनः प्राप्त करें ipCookie(...)क्योंकि $ कुकी के साथ यह वापस आ जाएगी undefined



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

कुकी उपयोग बनाने के लिए

ipCookie(key, value);

मान स्ट्रिंग्स, संख्याओं, बूलियनों, सरणियों और वस्तुओं का समर्थन करता है और स्वचालित रूप से कुकी में क्रमबद्ध होगा।

आप कुछ अतिरिक्त विकल्प भी सेट कर सकते हैं, जैसे किसी कुकी के समाप्त होने पर दिन की संख्या

ipCookie(key, value, { expires: 21 });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.