दिलचस्प पोस्ट
सी # वस्तुओं के लिए लेनदेन? कैसे सी में चर पते मुद्रित करने के लिए? क्यों सबसे java.util.Date तरीकों से पदावनत थे? अल्पविराम से अलग होने वाली सूची के रूप में MySQL परिणाम फ़्लेक्सबॉक्स कॉलम-रिवर्स और फ़ायरफ़ॉक्स / आईई में अतिप्रवाह अजीब "406 स्वीकार्य नहीं" त्रुटि सीएसएस – समान ऊँचाई कॉलम? अजगर में अजीब बंद करने का व्यवहार जावास्क्रिप्ट में स्ट्रिंग में स्ट्रिंग को कैसे परिवर्तित करें? पायथन के साथ एमपी 3 मेटा-डाटा एक्सेस करना जावास्क्रिप्ट में मैं एक बिटवायर ऑपरेटर का उपयोग कहाँ करूँगा? पिछले महीने की पहली तारीख और अंतिम तिथि कैसे प्राप्त करें? (जावा) उल्का ऐप्स ऑफ़लाइन कैसे काम कर सकते हैं? ओएथ का उपयोग करके उसकी / उसकी ट्विटर पहचानने के बाद उपयोगकर्ता का ईमेल आईडी प्राप्त करने का कोई तरीका क्या है? पीएचपी में फ्लोट की तुलना करें

HTML5 स्थानीय भंडारण की समय-सीमा समाप्त करते समय आइटम कब होते हैं?

स्थानीय स्टोरेज (एचटीएमएलएक्स में डीओएम स्टोरेज के हिस्से के रूप में) में कब तक जमा किया गया डेटा उपलब्ध है? क्या मैं डेटा के लिए समाप्ति समय सेट कर सकता हूं जिसे मैंने स्थानीय स्टोरेज में रखा है?

Solutions Collecting From Web of "HTML5 स्थानीय भंडारण की समय-सीमा समाप्त करते समय आइटम कब होते हैं?"

जॉन रेसिग के अनुसार, समाप्ति निर्दिष्ट करना संभव नहीं है यह पूरी तरह से उपयोगकर्ता पर निर्भर है

http://ejohn.org/blog/dom-storage/

संपादित करें – जाहिर है, आपका स्वयं का आवेदन सामग्री को सक्रिय रूप से निकाल सकता है यदि यह तय करता है कि यह बहुत पुराना है। यही है, आप स्पष्ट रूप से कुछ प्रकार का टाइमस्टैम्प शामिल कर सकते हैं जिसे आपने बचाया है, और बाद में इसका उपयोग करने के लिए यह तय करने के लिए उपयोग करें कि जानकारी को फ़्लश किया जाना चाहिए या नहीं।

मैं उस वस्तु में टाइमस्टैम्प को स्टोर करने का सुझाव दूंगा जिसे आप स्थानीय स्टोरेज में स्टोर करते हैं

var object = {value: "value", timestamp: new Date().getTime()} localStorage.setItem("key", JSON.stringify(object)); 

आप ऑब्जेक्ट को पार्स कर सकते हैं, टाइमस्टैम्प प्राप्त कर सकते हैं और वर्तमान डेट के साथ तुलना कर सकते हैं, और यदि आवश्यक हो, ऑब्जेक्ट के मूल्य को अपडेट कर सकते हैं।

 var object = JSON.parse(localStorage.getItem("key")), dateString = object.timestamp, now = new Date().getTime().toString(); compareTime(dateString, now); //to implement 

आप lscache का उपयोग कर सकते हैं यह स्वचालित रूप से आपके लिए यह संभालता है, ऐसे उदाहरणों में जहां संग्रहण आकार सीमा से अधिक है। यदि ऐसा होता है, तो यह छंटाई आइटम शुरू हो जाती हैं जो उनके निर्दिष्ट समाप्ति के सबसे निकट हैं।

readme :

 lscache.set Stores the value in localStorage. Expires after specified number of minutes. Arguments key (string) value (Object|string) time (number: optional) 

यह नियमित भंडारण विधियों के बीच एकमात्र वास्तविक अंतर है जाओ, निकालें, आदि एक ही काम करते हैं

अगर आपको उस ज़्यादा कार्यक्षमता की आवश्यकता नहीं है, तो आप बस मूल्य के साथ एक टाइम स्टाम्प (JSON के माध्यम से) को स्टोर कर सकते हैं और इसे समाप्ति के लिए देख सकते हैं।

उल्लेखनीय, इसका एक अच्छा कारण है कि उपयोगकर्ता को स्थानीय संग्रहण कब छोड़ा गया है। लेकिन, lscache जैसी चीज़ों को काम में आना पड़ता है जब आपको बहुत ही अस्थायी डाटा स्टोर करना पड़ता है।

जबकि स्थानीय भंडारण एक समाप्ति तंत्र की आपूर्ति नहीं करता है, तो कुकीज़ करते हैं बस कुकी के साथ एक स्थानीय स्टोरेज कुंजी जोड़कर एक आसान तरीका प्रदान करता है यह सुनिश्चित करने के लिए कि स्थानीय संग्रहण को कुकी के रूप में समान समाप्ति मानकों के साथ अपडेट किया जा सकता है।

JQuery में उदाहरण:

 if (!$.cookie('your_key') || !localStorage.getItem('your_key')) { //get your_data from server, then... localStorage.setItem('your_key', 'your_data' ); $.cookie('your_key', 1); } else { var your_data = localStorage.getItem('your_key'); } // do stuff with your_data 

यह उदाहरण ब्राउज़र को बंद होने पर डिफ़ॉल्ट पैरामीटर के साथ एक कुकी सेट करता है। इस प्रकार, जब ब्राउज़र बंद हो जाता है और पुनः खोला जाता है, तो आपके_डेटा के लिए स्थानीय डेटा संग्रह सर्वर-साइड कॉल द्वारा रीफ़्रेश हो जाता है।

ध्यान दें कि यह स्थानीय डेटा स्टोर को हटाने के समान नहीं है, बल्कि इसके बजाय स्थानीय डेटा संग्रह को अद्यतन करते समय कुकी समाप्त हो जाती है। हालांकि, यदि आपका मुख्य लक्ष्य 4K क्लाइंट साइड (कुकी आकार के लिए सीमा) से अधिक स्टोर करने में सक्षम होना है, तो कुकी और स्थानीय स्टोरेज का यह युग्म कुकी के रूप में समान समाप्ति पैरामीटर का उपयोग करके आपको बड़ा संग्रहण आकार पूरा करने में मदद करेगा ।

ब्रायनर फरेरा, एक अच्छा मुद्दा लाया है: एक भाई कुंजी को संचयित करना जहां समाप्ति की जानकारी मौजूद है। इस तरह, यदि आपके पास बड़ी मात्रा में चाबियाँ हैं या यदि आपके मान बड़े जेसन ऑब्जेक्ट हैं , तो आपको टाइमस्टैम्प तक पहुंचने के लिए उन्हें पार्स करने की आवश्यकता नहीं है।

यहां एक बेहतर संस्करण का अनुसरण किया गया है:

  /* removeStorage: removes a key from localStorage and its sibling expiracy key params: key <string> : localStorage key to remove returns: <boolean> : telling if operation succeeded */ function removeStorage(name) { try { localStorage.removeItem(name); localStorage.removeItem(name + '_expiresIn'); } catch(e) { console.log('removeStorage: Error removing key ['+ key + '] from localStorage: ' + JSON.stringify(e) ); return false; } return true; } /* getStorage: retrieves a key from localStorage previously set with setStorage(). params: key <string> : localStorage key returns: <string> : value of localStorage key null : in case of expired key or failure */ function getStorage(key) { var now = Date.now(); //epoch time, lets deal only with integer // set expiration for storage var expiresIn = localStorage.getItem(key+'_expiresIn'); if (expiresIn===undefined || expiresIn===null) { expiresIn = 0; } if (expiresIn < now) {// Expired removeStorage(key); return null; } else { try { var value = localStorage.getItem(key); return value; } catch(e) { console.log('getStorage: Error reading key ['+ key + '] from localStorage: ' + JSON.stringify(e) ); return null; } } } /* setStorage: writes a key into localStorage setting a expire time params: key <string> : localStorage key value <string> : localStorage value expires <number> : number of seconds from now to expire the key returns: <boolean> : telling if operation succeeded */ function setStorage(key, value, expires) { if (expires===undefined || expires===null) { expires = (24*60*60); // default: seconds for 1 day } else { expires = Math.abs(expires); //make sure it's positive } var now = Date.now(); //millisecs since epoch time, lets deal only with integer var schedule = now + expires*1000; try { localStorage.setItem(key, value); localStorage.setItem(key + '_expiresIn', schedule); } catch(e) { console.log('setStorage: Error setting key ['+ key + '] in localStorage: ' + JSON.stringify(e) ); return false; } return true; } 

जीवन चक्र एप्लिकेशन / उपयोगकर्ता द्वारा नियंत्रित किया जाता है

मानक से :

उपयोगकर्ता एजेंटों को स्थानीय भंडारण क्षेत्रों से केवल सुरक्षा कारणों के लिए या जब उपयोगकर्ता द्वारा ऐसा करने का अनुरोध किया जाता है, तो डेटा को समाप्त करना चाहिए। उपयोगकर्ता एजेंट हमेशा डेटा को हटाने से बचना चाहिए, जबकि एक स्क्रिप्ट जो उस डेटा को एक्सेस कर सके,

डब्ल्यू 3 सी मसौदे से:

उपयोगकर्ता एजेंटों को स्थानीय भंडारण क्षेत्रों से केवल सुरक्षा कारणों के लिए या जब उपयोगकर्ता द्वारा ऐसा करने का अनुरोध किया जाता है, तो डेटा को समाप्त करना चाहिए। उपयोगकर्ता एजेंट हमेशा डेटा को हटाने से बचना चाहिए, जबकि एक स्क्रिप्ट जो उस डेटा को एक्सेस कर सके,

आप setItem (कुंजी, मान) का उपयोग करके अपने कार्यक्रम पर अपने अपडेट करना चाहते हैं; जो नए डेटा के साथ दिए गए कुंजी को जोड़ या अद्यतन करेगा।

 // Functions function removeHtmlStorage(name) { localStorage.removeItem(name); localStorage.removeItem(name+'_time'); } function setHtmlStorage(name, value, expires) { if (expires==undefined || expires=='null') { var expires = 3600; } // default: 1h var date = new Date(); var schedule = Math.round((date.setSeconds(date.getSeconds()+expires))/1000); localStorage.setItem(name, value); localStorage.setItem(name+'_time', schedule); } function statusHtmlStorage(name) { var date = new Date(); var current = Math.round(+date/1000); // Get Schedule var stored_time = localStorage.getItem(name+'_time'); if (stored_time==undefined || stored_time=='null') { var stored_time = 0; } // Expired if (stored_time < current) { // Remove removeHtmlStorage(name); return 0; } else { return 1; } } // Status var cache_status = statusHtmlStorage('cache_name'); // Has Data if (cache_status == 1) { // Get Cache var data = localStorage.getItem('cache_name'); alert(data); // Expired or Empty Cache } else { // Get Data var data = 'Pay in cash :)'; alert(data); // Set Cache (30 seconds) if (cache) { setHtmlStorage('cache_name', data, 30); } } 

यहां सत्रस्ट्रॉज का उपयोग करने के लिए अत्यधिक अनुशंसित है

  • यह स्थानीय स्टोरेज के समान है, लेकिन जब सत्र नष्ट हो जाता है / ब्राउज़र बंद होता है
  • सत्र-स्टोरेज कुकी के खिलाफ नेटवर्क ट्रैफिक को कम करने के लिए भी उपयोगी है

निर्धारित मूल्य उपयोग के लिए

 sessionStorage.setItem("key","my value"); 

मूल्य का उपयोग करने के लिए

 var value = sessionStorage.getItem("key"); 

एपीआई देखने के लिए यहां क्लिक करें

सेट के लिए सभी तरीके हैं

  sessionStorage.key = "my val"; sessionStorage["key"] = "my val"; sessionStorage.setItem("key","my value"); 

पाने के लिए सभी तरीके हैं

  var value = sessionStorage.key; var value = sessionStorage["key"]; var value = sessionStorage.getItem("key"); 

यदि कोई jQuery के jStorage प्लगइन का उपयोग कर रहा है, तो इसे jTorage प्लगइन के साथ setTTL फ़ंक्शन के साथ समापन किया जा सकता है

 $.jStorage.set('myLocalVar', "some value"); $.jStorage.setTTL("myLocalVar", 24*60*60*1000); // 24 Hr. 

कोणीय और स्थानीय परिवेश का उपयोग कर वैकल्पिक हल:

 angular.module('app').service('cacheService', function() { return { set: function(key, value, expireTimeInSeconds) { return localforage.setItem(key, { data: value, timestamp: new Date().getTime(), expireTimeInMilliseconds: expireTimeInSeconds * 1000 }) }, get: function(key) { return localforage.getItem(key).then(function(item) { if(!item || new Date().getTime() > (item.timestamp + item.expireTimeInMilliseconds)) { return null } else { return item.data } }) } } }) 

@ सेबर्मेलि का दृष्टिकोण मेरी राय में सबसे अच्छा है, लेकिन यदि आप केवल एक सत्र के जीवन के लिए डेटा को जारी रखने के लिए चाहते हैं तो सत्र sessionStorage शायद एक बेहतर विकल्प है:

यह एक वैश्विक ऑब्जेक्ट (सत्रस्ट्रॉज) है जो एक संग्रहण क्षेत्र को बनाए रखता है जो पेज सत्र की अवधि के लिए उपलब्ध है। एक पृष्ठ सत्र तब तक चलता रहता है जब तक कि ब्राउज़र खुला रहता है और पृष्ठ पुनः लोड होने पर और पुन: व्यवस्थित होता है। एक नया टैब या विंडो में एक पृष्ठ खोलने पर एक नया सत्र शुरू किया जाएगा।

MDN: sessionStorage

खोजकर्ताओं के लाभ के लिए:

फर्नांडो की तरह, मैं जेसन का भार जोड़ना नहीं चाहता था, जब संग्रहीत मान सरल थे। मुझे बस कुछ यूआई इंटरैक्शन को ट्रैक करने और डेटा को संबंधित रखने की ज़रूरत है (जैसे कि कैसे उपयोगकर्ता ने ईकॉमर्स साइट का उपयोग करने से पहले उपयोग किया)।

यह हर मापदंड को पूरा नहीं करेगा, लेकिन उम्मीद है कि किसी के लिए एक त्वरित कॉपी + पेस्ट स्टार्टर होगा और एक अन्य लिबरेशन को जोड़ने से बचें।

नोट: यदि आइटम को व्यक्तिगत रूप से पुनर्प्राप्त करने की आवश्यकता है तो यह अच्छा नहीं होगा।

 // Addition if(window.localStorage){ localStorage.setItem('myapp-' + new Date().getTime(), 'my value'); } // Removal of all expired items if(window.localStorage){ // two mins - (1000 * 60 * 20) would be 20 mins var expiryTime = new Date().getTime() - (1000 * 60 * 2); var deleteRows = []; for(var i=0; i < localStorage.length; i++){ var key = localStorage.key(i); var partsArray = key.split('-'); // The last value will be a timestamp var lastRow = partsArray[partsArray.length - 1]; if(lastRow && parseInt(lastRow) < expiryTime){ deleteRows.push(key); } } // delete old data for(var j=0; j < deleteRows.length; j++){ localStorage.removeItem(deleteRows[j]); } } 

अगर कोई अभी भी एक त्वरित समाधान की तलाश में है और jquery जैसी निर्भरता नहीं चाहता है तो मैंने एक मिनी लिब लिखी है जो स्थानीय / सत्र / कस्टम भंडारण के समापन को जोड़ता है, आप इसे यहां स्रोत के साथ पा सकते हैं:

https://github.com/RonenNess/ExpiredStorage

यह काम करता है .. व्यक्तिगत अनुभव ..

 setTimeout(function(){ localStorage.clear(); }, 10000); 

आप jsp में जावा और जावास्क्रिप्ट को मिक्स कर सकते हैं यहाँ मेरा तर्क है

 //Setting Expiry date after 1 month <% int no_of_days =30; Date dNow = new Date(); SimpleDateFormat ft = new SimpleDateFormat("dd-MM-yyyy"); Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, no_of_days); Date dateAfter1Month= cal.getTime(); String fromDate = ft.format(dateAfter1Month); %> var expiryDate = "<%=fromDate%>"; localStorage.setItem("expiry",expiryDate); //Checking Date is matching <% Date dNow = new Date(); SimpleDateFormat ft = new SimpleDateFormat("dd-MM-yyyy"); String curDate = ft.format(dNow); %> var curDate = "<%=curDate%>"; var expiryDate=localStorage.getItem("expiry"); if(curDate=expiryDate){ localStorage.removeItem("expiry"); }