ব্রাউজার উইন্ডো / ট্যাব বন্ধ হয়ে গেলে কীভাবে লোকাল স্টোরেজ আইটেম মুছবেন?


403

আমার কেস: কী + মান সহ লোকালস্টোরেজ যা ব্রাউজারটি বন্ধ থাকা অবস্থায় মুছে ফেলা উচিত এবং একক ট্যাব নয়।

আমার কোডটি সঠিক কিনা এবং কী উন্নত করা যেতে পারে তা দয়া করে দেখুন:

//create localStorage key + value if not exist
if(localStorage){
   localStorage.myPageDataArr={"name"=>"Dan","lastname"=>"Bonny"}; 
}

//when browser closed - psedocode
$(window).unload(function(){
  localStorage.myPageDataArr=undefined;
});

32
আপনি যদি ব্রাউজার বন্ধের সাথে স্থানীয় সঞ্চয়স্থান সাফ করতে চান তবে আমি এটি ব্যবহারের জন্য আপনার কারণগুলিতে প্রশ্ন করব।
ডানহামজজ্জ

16
আপনার স্থানীয় এবং সেশন স্টোরেজ উভয় জিনিস থাকতে পারে - আমি সেশন মানগুলির জন্য সেশন স্টোরেজটি ব্যবহার করব। বিটিডব্লিউ, অপরিবর্তিত একটি মান সেট করা এটি মুছবে না বা লোকালস্টোরেজ থেকে সরিয়ে দেবে না, এটি কেবল তার মানটিকে অপরিজ্ঞায়িত করে।
কেনেবেকে

2
@ একনিবেক - এর জন্য সেট করা undefinedপূর্বে সঞ্চিত আইটেমটি ওভাররাইট করে। তবে হ্যাঁ, ব্যবহার .removeItem()করা আরও উপযুক্ত।
nnnnnn

2
লোকাল স্টোরেজের পরিবর্তে সেশনস্টোরেজটি ব্যবহার করুন
আলবার্তো

2
localStorage.clear(); আপনি পুরো স্টোরেজ সাফ করতে চাইলে ব্যবহার করুন ।
কালো এমবাবা

উত্তর:


802

মুছে ফেলা অপারেটরের সাথে নয় এবং এটি করা উচিত:

localStorage.removeItem(key);

1
আমরা কেন ডিলিট অপারেটরটি ব্যবহার করতে পারি না? আমার পরীক্ষাগুলি থেকে মনে হয় যে delete localStorage.keyঠিক তেমন কাজ করে localStorage.removeItem(key)। আমি যখন আমার ভেরিয়েবলের localStorage.key = 1পরিবর্তে সেট করব তখন মুছে ফেলা ব্যবহার করা আমার কাছে পরিষ্কার মনে হয় localStorage.setItem('key', 1)
আস্ট-

6
যদি এটি কাজ করে তবে আপনি প্রযুক্তিগতভাবে এটি ব্যবহার করতে পারেন। তবে সরানো আইটেমটি সদস্য ফাংশন হিসাবে সরবরাহ করা বিবেচনা করে এটি পৃথক অপারেটর ব্যবহার করে সম্ভাব্য অপরিজ্ঞাত আচরণের পরিবর্তে এটি ব্যবহার করা যৌক্তিক বলে মনে হয়।
কুংফু

@ কুংফু মনে রাখবেন একটি সম্ভাব্য দুর্বল ধারণা localStorage.removeItem = null;তৈরি করে সর্বদা (দুর্ঘটনাক্রমে) যা করা সম্ভব localStorage.removeItem(key);
skeggse

31
আমি দেখতে পাচ্ছি না যে এটির জন্য কীভাবে যুক্তিসঙ্গত পরিকল্পনা করা উচিত। যে কোনও ভাষা লোককে ধ্বংসাত্মক কাজ করতে দেয় তার অর্থ এই নয় যে আপনার ভাষাটির অপব্যবহারের বিরুদ্ধে প্রতিরক্ষা হিসাবে গ্রন্থাগারগুলি ব্যবহার করার অ-মানক উপায় অবলম্বন করা উচিত। আপনি বা আপনার সহযোগী বিকাশকারীরা যদি অনুরোধ এবং কার্যভারের মধ্যে পার্থক্য বুঝতে না পারেন তবে লোকালস্টোরেশন থেকে আইটেমগুলি কীভাবে সরিয়ে নেওয়া যায় তার চেয়ে আপনার অনেক বড় সমস্যা রয়েছে।
কুংফু

3
localStorage.key = 1এই ধরণের দুর্ঘটনা এড়ানোর জন্য @ সেকেগসে ঠিক এই কারণেই প্রথমে লেখার পক্ষে একটি খারাপ ধারণা
জীবন

114

windowগ্লোবাল কীওয়ার্ড সহ ব্যবহার করুন : -

 window.localStorage.removeItem('keyName');

6
উইন্ডো অবজেক্ট ব্যবহার করবেন কেন? খালি localStorage.removeItem(key)কাজ করে।
পারদীপ জৈন

3
এই লিঙ্কে খুঁজে বার করো stackoverflow.com/questions/5319878/...
vineet

এই সমাধানটি কি আসলেই 11 এর জন্য কাজ করে? সুপারিশ করুন. কৌনিক 5 কোডে আমার এই সমস্যা হচ্ছে।
করণ

95

আপনি beforeunloadজাভাস্ক্রিপ্টে ইভেন্টটি ব্যবহার করতে পারেন ।

ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করে আপনি এর মতো কিছু করতে পারেন:

window.onbeforeunload = function() {
  localStorage.removeItem(key);
  return '';
};

এটি ব্রাউজার উইন্ডো / ট্যাবটি বন্ধ হওয়ার আগে কীটি মুছে ফেলবে এবং বন্ধ উইন্ডো / ট্যাব ক্রিয়াটি আপনাকে নিশ্চিত করতে অনুরোধ করবে। আমি আশা করি এটি আপনার সমস্যার সমাধান করে।

দ্রষ্টব্য: onbeforeunloadপদ্ধতিটি একটি স্ট্রিং প্রদান করবে।


এটি সত্যই কার্যকর ছিল। উত্তরটি গ্রহণ করে ভাল লাগতে পারে (এমনকি এই সমস্ত সময়ের পরেও)।
রিচার্ড মরগান

8
@ অ্যাডস্টো ভ্যানিলাজেএস সরল জাভাস্ক্রিপ্ট :) এখানে দেখুন: ভ্যানিলাজেএস কি?
ভারত খত্রি

1
একটি সমস্যা হ'ল এটি আপনাকে একই পৃষ্ঠায় নেভিগেট করা সত্ত্বেও বলা হয়, কেবল ট্যাবটি বন্ধ থাকাকালীন নয়, যা সম্ভবত উদ্দেশ্যে করা যায় না। পার্শ্ব নোট: অনাব্যবস্থাপনা থেকে অপরিজ্ঞাত ফেরত আনলোড করার সময় বার্তাটি অক্ষম করবে।
স্টান বান্দি

যদি ব্যবহারকারী পৃষ্ঠায় থাকতে চান এবং আপনি ইতিমধ্যে স্থানীয় সঞ্চয়স্থানটি মুছে ফেলেন তবে কী হবে? এছাড়াও সমাধানটি ক্রোম এবং
আই

তাহলে সেশনস্টোরেজ কেন ব্যবহার করবেন না?
শচীন প্রসাদ

94

ব্রাউজার বন্ধ হয়ে গেলে আপনি কীটি মুছতে চান তার পরিবর্তে আপনার সেশনসটরেজ ব্যবহার করা উচিত।


3
এটি সেরা উত্তর; sessionStorageপ্রশ্নকর্তা যা বর্ণনা করেন তার প্রতিকার।
বেনি

8
উল্লেখের জন্য +1 sessionStorage, তবে ডাব্লু 3 সি সম্পাদকের খসড়াটি বলেছেন: 'ব্রাউজিং প্রসঙ্গে জীবনকালটি প্রকৃত ব্যবহারকারী এজেন্ট প্রক্রিয়া থেকেই আজীবন সম্পর্কিত হতে পারে, কারণ ব্যবহারকারী এজেন্ট পুনরায় আরম্ভের পরে পুনরায় শুরু হওয়া সেশনগুলিকে সমর্থন করতে পারে।'
তমস

28
'সেশন স্টোরেজ' এর সমস্যাটি হ'ল এটি কোনও সংরক্ষণ করা হয় না যখন আপনি একটি নতুন ট্যাব খোলেন, উদাহরণস্বরূপ, সিটিআরএল দিয়ে একটি লিঙ্ক ক্লিক করুন। আমার একটি স্থানীয় স্টোরেজ / সেশন স্টোরেজ হাইব্রিড লল দরকার।
এডউইন স্টটেলার 13

3
পছন্দ করুন আমি যখন তারা এইভাবে ডিজাইন করল তখন তারা কী ভাবছিল তা নিয়ে আমি বিভ্রান্ত হয়েছি। ব্রাউজার বন্ধ হয়ে গেলে ধ্বংস হয়ে যাওয়া কেবলমাত্র একটি মেমোরি ব্রাউজার স্টোরেজেই আমাকে সত্যিকারের অ্যাক্সেসের প্রয়োজন হয়। আমি সংবেদনশীল তথ্য এমনভাবে সঞ্চয় করতে চাই যাতে পুরো ডোমেন জুড়ে অ্যাক্সেস করা যায় তবে আমি চাই না যে তথ্যটি কোনও হার্ড ডিস্কে আঘাত হান।
বিটি

19

ব্যবহার করার চেষ্টা করুন

$(window).unload(function(){
  localStorage.clear();
});

আশা করি এটি আপনার পক্ষে কাজ করে


2
আপনি কি সম্পূর্ণ লোকালস্টোরেজ সাফ করতে চান? যদি তাই কেবল ব্যবহার করুনlocalStorage.clear();
রাফায়েল মার্কস

এটি পরিষ্কার ছিল যে আমি প্রশ্নে কী চাইছি - কীটি কেবলমাত্র + মানটি মুছবে
ইওসফ

12
এটি সম্পূর্ণ লোকাল স্টোরেজ পরিষ্কার করবে। খারাপ সমাধান!
এমি

12

একটি খুব নির্দিষ্ট ব্যবহারের কেস রয়েছে যেখানে লোকালস্টোরেজের পরিবর্তে সেশনস্টোরেজ ব্যবহারের কোনও পরামর্শ সত্যই সহায়তা করে না। কমপক্ষে একটি ট্যাব খোলা থাকাকালীন ব্যবহারের কেস স্টোর করার মতো সাধারণ কিছু হতে পারে তবে আপনি যদি শেষ ট্যাবটি বন্ধ করে থাকেন তবে এটিকে অবৈধ করুন। আপনার যদি মানগুলি ক্রস-ট্যাব এবং উইন্ডো সংরক্ষণ করার প্রয়োজন হয় তবে সেশনস্টোরেজ আপনাকে শ্রোতার সাথে আপনার জীবনকে জটিল না করে, যেমন আমি চেষ্টা করেছি। এরই মধ্যে লোকালস্টোরেশন এটির জন্য উপযুক্ত হবে তবে এটি 'খুব ভাল' কাজ করে, যেহেতু আপনার ডেটা ব্রাউজার পুনরায় চালু হওয়ার পরেও সেখানে অপেক্ষা করবে। আমি একটি কাস্টম কোড এবং যুক্তি ব্যবহার করে শেষ করেছি যা উভয়েরই সুবিধা নেয়।

আমি বরং কোড দেওয়ার পরে ব্যাখ্যা করব। প্রথমে লোকালস্টোরেজে আপনার যা প্রয়োজন তা সঞ্চয় করুন, তারপরে লোকালস্টোরারেও এমন একটি কাউন্টার তৈরি করুন যাতে আপনি যে ট্যাবগুলি খোলেন তার সংখ্যা থাকবে। পৃষ্ঠাটি লোড হওয়ার সাথে সাথে পৃষ্ঠাটি লোড হওয়ার সময় এটি হ্রাস পাবে। আপনার ইভেন্টগুলি ব্যবহার করতে এখানে বেছে নিতে পারেন, আমি 'লোড' এবং 'আনলোড' পরামর্শ দেব। আপনি আনলোড করার সময়, কাউন্টারে 0 পৌঁছানোর সময় আপনি যে ক্লিনআপ কাজগুলি করতে চান তা করতে হবে, যার অর্থ আপনি শেষ ট্যাবটি বন্ধ করছেন। এখানে জটিল অংশটি আসে: পৃষ্ঠার অভ্যন্তরে কোনও পৃষ্ঠা পুনরায় লোড বা নেভিগেশন এবং ট্যাবটি বন্ধ করার মধ্যে পার্থক্য জানানোর জন্য আমি একটি নির্ভরযোগ্য এবং জেনেরিক উপায় খুঁজে পাইনি। সুতরাং আপনার সঞ্চয় করা ডেটা যদি এমন কোনও কিছু না হয় যা আপনি নিজের প্রথম ট্যাব এটি যাচাই করে লোডে পুনর্নির্মাণ করতে পারেন, তারপরে আপনি এটিকে প্রতিটি রিফ্রেশে সরাতে পারবেন না। পরিবর্তে আপনাকে ট্যাব কাউন্টার বাড়ানোর আগে প্রতিটি লোড এ সেশনসটরেজে একটি পতাকা সঞ্চয় করতে হবে। এই মানটি সংরক্ষণ করার আগে, আপনি এটির ইতিমধ্যে কোনও মান আছে কিনা তা পরীক্ষা করে দেখতে পারেন এবং যদি তা না হয়, এর অর্থ এটি আপনি প্রথমবারের জন্য এই অধিবেশনটিতে লোড করছেন, এর অর্থ এটি যদি আপনি লোড এ ক্লিনআপ করতে পারেন তবে এটি মান সেট করা হয়নি এবং কাউন্টারটি 0 হয়।


"সেশনস্টোরেশন কেন ব্যবহার করা হচ্ছে না?" এর উত্তর হিসাবে? w3schools.com/html/html5_webstorage.asp থেকেও এপ্রোচ করুন : "উইন্ডো অ্যাসেসিওন স্টোরেজ - এক সেশনের জন্য ডেটা সঞ্চয় করে (ট্যাবটি বন্ধ হয়ে গেলে ডেটা হারিয়ে যায়)"। সুতরাং উত্তর ঠিক যে। আমি বর্ণিত ইউজকেসে এমনকি যদি আপনি অবিচ্ছিন্ন কিছু চান তবে সেশন স্টোরেজটি অকেজো।
সলথুন

3
আমি ভাবছি এর জন্য সর্বোত্তম বাস্তবায়ন হ'ল একটি ব্রাউজার ওয়াচচার পরিষেবা যা মূলত এমন ঘটনাগুলিকে আগুন ধরিয়ে দেয় যা অন্যান্য উপাদানগুলি শুনতে পারে (যেমন ব্রাউজার-ওপেন, ব্রাউজার-বন্ধ, ব্রোজার-লোড, ব্রাউজার-আনলোড ইত্যাদি এবং এর ভিতরে এই সমস্ত বাস্তবায়ন বিবরণ গোপন করে) প্রতিটি উপাদান তার কাজটি সম্পাদন করার জন্য কোন ইভেন্টগুলি পরিচালনা করতে হবে তা সিদ্ধান্ত নিতে পারে My আমার একমাত্র প্রশ্নটি হবে যদি মেশিন বা কোনও কিছুর সাথে বিদ্যুত কেটে যায় তবে এই বৈশিষ্ট্যগুলি পরের বার ব্রাউজারটি খোলা থাকলে তারা লোকাল স্টোরেজে থাকবে they ?
pQuestions123

11

সেশন স্টোরেজ ব্যবহার করুন

সেশন স্টোরেজ অবজেক্টটি স্থানীয় স্টোরেজ অবজেক্টের সমান, এটি কেবল একটি সেশনের জন্য ডেটা সঞ্চয় করে। ব্যবহারকারী ব্রাউজার উইন্ডোটি বন্ধ করলে ডেটা মুছে ফেলা হয়।

নিম্নোক্ত উদাহরণটি বর্তমান অধিবেশনে কোনও ব্যবহারকারী কতবার একটি বোতাম ক্লিক করেছে তা গণনা করে:

উদাহরণ

if (sessionStorage.clickcount) {
    sessionStorage.clickcount = Number(sessionStorage.clickcount) + 1;
} else {
    sessionStorage.clickcount = 1;
}
document.getElementById("result").innerHTML = "You have clicked the button " +
sessionStorage.clickcount + " time(s) in this session.";

1
ডেটা ব্রাউজার ট্যাব বন্ধ মুছে ফেলা হয়।
Kosmonaft

7
for (let i = 0; i < localStorage.length; i++) {
    if (localStorage.key(i).indexOf('the-name-to-delete') > -1) {
        arr.push(localStorage.key(i));
    }
}

for (let i = 0; i < arr.length; i++) {
    localStorage.removeItem(arr[i]);
}

5
localStorage.removeItem(key);  //item

localStorage.clear(); //all items

1
কোনও পুরানো প্রশ্নের উত্তর দেওয়ার সময়, আপনার উত্তর অন্যান্য স্ট্যাকওভারফ্লো ব্যবহারকারীদের কাছে অনেক বেশি কার্যকর হবে যদি আপনি আপনার উত্তর কীভাবে সহায়তা করে তা ব্যাখ্যা করার জন্য কিছু প্রসঙ্গ অন্তর্ভুক্ত করে, বিশেষত এমন একটি প্রশ্নের জন্য যা ইতিমধ্যে স্বীকৃত উত্তর রয়েছে। দেখুন: আমি কীভাবে ভাল উত্তর লিখব
Tân

আমার কাছে যথেষ্ট পরিষ্কার দেখাচ্ছে
জর্জিও টেম্পেস্তা

4

যদিও, কিছু ব্যবহারকারী ইতিমধ্যে ইতিমধ্যে এই প্রশ্নের উত্তর দিয়েছেন, আমি এই সমস্যাটি সমাধানের জন্য অ্যাপ্লিকেশন সেটিংসের উদাহরণ দিচ্ছি।

আমারও একই প্রশ্ন ছিল. আমি আমার কৌণিক অ্যাপ্লিকেশনটিতে https://github.com/grevory/angular-local- স্টোরেজ মডিউল ব্যবহার করছি । আপনি যদি নিজের অ্যাপটিকে নীচে কনফিগার করেন তবে এটি স্থানীয় স্টোরেজের পরিবর্তে সেশন স্টোরেজে পরিবর্তনশীল সংরক্ষণ করবে। অতএব, আপনি যদি ব্রাউজারটি বন্ধ করেন বা ট্যাবটি বন্ধ করেন তবে সেশন স্টোরেজ স্বয়ংক্রিয়ভাবে সরানো হবে। আপনার কিছু করার দরকার নেই।

app.config(function (localStorageServiceProvider) {
  localStorageServiceProvider
  .setPrefix('myApp')
  .setStorageType('sessionStorage')
});

আশা করি এটি সাহায্য করবে।


4

পাঁচটি পদ্ধতি বেছে নিতে বেছে নেওয়া হয়েছে:

  • সেট আইটেম (): লোকালস্টোরেজে কী এবং মান যুক্ত করুন
  • getItem (): লোকালস্টোরেজ থেকে কী দ্বারা একটি মান পুনরুদ্ধার করুন
  • সরানো আইটেম (): লোকালস্টোরেজ থেকে কী দ্বারা কোনও আইটেম সরান
  • ক্লিয়ার (): সমস্ত লোকালস্টোরেজ সাফ করুন
  • কী (): লোকালস্টোরেজের নবম কী পুনরুদ্ধার করতে একটি সংখ্যা পাস করেছে

যখন আপনি অনুরোধ করা হয় তখন আপনি পরিষ্কার () ব্যবহার করতে পারেন, যখন এই ডোমেনের সমস্ত রেকর্ডের পুরো স্টোরেজ সাফ করে। এটি কোনও পরামিতি গ্রহণ করে না।

window.localStorage.clear();

3

স্থানীয় স্টোরেজ সহ কাজ করার সময় আপনার ব্রাউজার সমর্থন আছে কিনা তা দেখার জন্য এখানে একটি সহজ পরীক্ষা দেওয়া আছে:

if(typeof(Storage)!=="undefined") {
  console.log("localStorage and sessionStorage support!");
  console.log("About to save:");
  console.log(localStorage);
  localStorage["somekey"] = 'hello';
  console.log("Key saved:");
  console.log(localStorage);
  localStorage.removeItem("somekey");  //<--- key deleted here
  console.log("key deleted:");
  console.log(localStorage);
  console.log("DONE ===");
} else {
  console.log("Sorry! No web storage support..");
}

এটি প্রত্যাশা মতো আমার জন্য কাজ করেছে (আমি গুগল ক্রোম ব্যবহার করি)। রূপান্তরিত: http://www.w3schools.com/html/html5_webstorage.asp থেকে ।


3

আমি মনে করি না যে এখানে উপস্থাপিত সমাধানটি 100% সঠিক কারণ উইন্ডো.নবোফরআনলোড ইভেন্টটি কেবল ব্রাউজার / ট্যাব বন্ধ না হলে (যার প্রয়োজন হয়) বলা হয় না, তবে অন্যান্য সমস্ত ইভেন্টেও। (যার প্রয়োজনের প্রয়োজন হবে না)

উইন্ডোটি চালাতে পারে এমন ইভেন্টগুলির তালিকার আরও তথ্যের জন্য এই লিঙ্কটি দেখুন on

http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx


আপনি ঠিক থাকতে পারেন, তবে এখনও আপনি যা পোস্ট করেছেন তা একটি মন্তব্য নয়, উত্তর নয়।
nnnnnn

3

সেশনস্টোরেজ কেন ব্যবহার হচ্ছে না?

"সেশন স্টোরেজ অবজেক্টটি স্থানীয় স্টোরেজ অবজেক্টের সমান, এটি কেবল একটি সেশনের জন্য ডেটা সংরক্ষণ করে। ব্যবহারকারী ব্রাউজার উইন্ডোটি বন্ধ করলে ডেটা মুছে ফেলা হয়।"

http://www.w3schools.com/html/html5_webstorage.asp


3

এটি জিজ্ঞাসা করার 6 বছর পরে এই প্রশ্নটি দেখার পরে, আমি দেখতে পেলাম যে এখনও এই প্রশ্নের যথেষ্ট উত্তর নেই; যা নিম্নলিখিত সমস্ত অর্জন করা উচিত:

  • ব্রাউজারটি বন্ধ করার পরে স্থানীয় স্টোরেজ সাফ করুন (বা ডোমেনের সমস্ত ট্যাব)
  • কমপক্ষে একটি ট্যাব সক্রিয় থাকলে, ট্যাবগুলিতে স্থানীয় সঞ্চয়স্থান সংরক্ষণ করুন
  • একক ট্যাব পুনরায় লোড করার সময় স্থানীয় সঞ্চয় সংরক্ষণ করুন

উপরোক্ত অর্জনের জন্য প্রতিটি পৃষ্ঠা লোডের শুরুতে জাভাস্ক্রিপ্টের এই টুকরোটি সম্পাদন করুন:

((nm,tm) => {
    const
            l = localStorage,
            s = sessionStorage,
            tabid = s.getItem(tm) || (newid => s.setItem(tm, newid) || newid)((Math.random() * 1e8).toFixed()),
            update = set => {
                let cur = JSON.parse(l.getItem(nm) || '{}');
                if (set && typeof cur[tabid] == 'undefined' && !Object.values(cur).reduce((a, b) => a + b, 0)) {
                    l.clear();
                    cur = {};
                }
                cur[tabid] = set;
                l.setItem(nm, JSON.stringify(cur));
            };
    update(1);
    window.onbeforeunload = () => update(0);
})('tabs','tabid');

সম্পাদনা করুন: এখানে মূল ধারণাটি নিম্নলিখিত:

  1. স্ক্র্যাচ থেকে শুরু করার সময়, সেশন স্টোরেজটিকে একটি কীতে একটি এলোমেলো আইডি বরাদ্দ করা হয় tabid
  2. লোকাল স্টোরেজটি এমন কী দিয়ে সেট করা হয় যা বলা হয় এমন একটি কী যার সাহায্যে tabsএই কীটি tabid1 তে সেট করা থাকে a
  3. যখন ট্যাবটি লোড করা হয়, স্থানীয় স্টোরেজ 0 তে সেট থাকা tabsকোনও অবজেক্টে আপডেট হয় tabid
  4. যদি ট্যাবটি পুনরায় লোড করা হয় তবে এটি প্রথমে আনলোড করা এবং পুনরায় শুরু করা হয়। যেহেতু সেশন স্টোরেজের কী tabidউপস্থিত রয়েছে এবং তাই স্থানীয় সঞ্চয়স্থানের tabsউপ-কী সহ স্থানীয় স্টোরেজ কী tabidসাফ হয় না।
  5. ব্রাউজারটি লোড করা অবস্থায়, সমস্ত সেশন স্টোরেজ সাফ হয়ে যাবে। পুনরায় শুরু করার সময় সেশনটির সঞ্চয়স্থান tabidআর উপস্থিত থাকবে না এবং একটি নতুন tabidউত্পন্ন হবে। যেহেতু স্থানীয় স্টোরেজটির কাছে এটির জন্য একটি উপ-কী tabidনেই, বা অন্য কোনও tabid(সমস্ত অধিবেশন বন্ধ ছিল), এটি পরিষ্কার হয়েছে।
  6. একটি নতুন তৈরি ট্যাবে, tabidসেশন স্টোরেজে একটি নতুন উত্পন্ন হয়, তবে কমপক্ষে একটি tabs[ tabid] উপস্থিত থাকায় স্থানীয় সঞ্চয়স্থান সাফ হয় নি

1
যদি ব্রাউজার ক্রাশ হয় তবে তবে এটি কল করা window.onbeforeunloadহবে না এবং স্থানীয় tabs[tabid]0 => তে সেট করা হবে না তবে স্থানীয় সঞ্চয়স্থান আর কখনও সাফ হবে না। আমি মনে করি সেক্ষেত্রে একটি ওয়াচডগ আরও উপযুক্ত হবে, ট্যাব লোডিংয়ের উপরে 1 লেখার পরিবর্তে আপনার বর্তমান টাইমস্ট্যাম্পটি লেখা উচিত। তারপরে হ্রাস করার অংশে আপনার বিলম্বকে দৃ .়ভাবে বলা উচিত যেহেতু সেই টাইমস্ট্যাম্পটি খুব বেশি বড় নয় বা যদি হয় তবে 0 দ্বারা প্রতিস্থাপন করা উচিত। এইভাবে, আপনি প্রকৃত কলের উপর নির্ভর করেন না onbeforeunload। স্থানীয় স্টোরেজ অস্তিত্ব বজায় রাখার জন্য ট্যাবটিতে কেবল সময়ে সময়ে ওয়াচডগটি পুনরায় সেট করা দরকার ।
xryl669

1

এটি একটি পুরানো প্রশ্ন, তবে মনে হচ্ছে উপরের উত্তরগুলির মধ্যে কোনওটিই সঠিক নয়।

আপনি যদি প্রমাণীকরণ বা কোনও সংবেদনশীল তথ্য সঞ্চয় করতে চান যা ব্রাউজারটি বন্ধ থাকে কেবল তখনই ধ্বংস হয়, আপনি নির্ভর করতে পারেন sessionStorageএবং localStorageক্রস-ট্যাব বার্তা প্রেরণের জন্য।

মূলত, ধারণাটি হ'ল:

  1. আপনি কোনও পূর্ববর্তী ট্যাবটি খোলা না থেকে বুটস্ট্র্যাপ করুন, এইভাবে আপনার উভয় localStorageএবং sessionStorageখালি (যদি না হয় তবে আপনি এটি সাফ করতে পারেন localStorage)। আপনাকে একটি বার্তা ইভেন্ট শ্রোতার নিবন্ধ করতে হবে localStorage
  2. ব্যবহারকারী এই ট্যাবে একটি সংবেদনশীল তথ্য প্রমাণীকরণ / তৈরি করুন (বা আপনার ডোমেনে খোলা অন্য কোনও ট্যাব)।
  3. sessionStorageসংবেদনশীল তথ্য সংরক্ষণ করার জন্য আপনি আপডেট করুন এবং localStorageএই তথ্যটি সংরক্ষণ করার জন্য ব্যবহার করুন, তারপরে এটি মুছে ফেলুন (আপনি এখানে সময় দেওয়ার বিষয়ে চিন্তা করবেন না, যেহেতু ডেটা পরিবর্তনের সময় ইভেন্টটি সারিবদ্ধ হয়েছিল)। সেই সময়ে খোলা অন্য যে কোনও ট্যাব বার্তা ইভেন্টে ফিরে ডাকা হবে এবং sessionStorageসংবেদনশীল তথ্য সহ সেগুলি আপডেট করবে ।
  4. যদি ব্যবহারকারী আপনার ডোমেনে একটি নতুন ট্যাব খুলেন sessionStorageতবে তা খালি থাকবে। localStorageকোডটিতে (উদাহরণ হিসাবে req:) একটি কী সেট করতে হবে । যে কোনও (সমস্ত) অন্য ট্যাব বার্তার ইভেন্টে আবার কল করা হবে, সেই কীটি দেখুন এবং তাদের sessionStorage(3 এর মতো) এর সংবেদনশীল তথ্যের সাথে উত্তর দিতে পারে , যদি তাদের কাছে থাকে।

দয়া করে লক্ষ্য করুন যে এই স্কিমটি window.onbeforeunloadভঙ্গুর ইভেন্টের উপর নির্ভর করে না (যেহেতু ব্রাউজারটি এই ইভেন্টগুলি চালিত না করেই বন্ধ / ক্র্যাশ হতে পারে)। এছাড়াও, সংবেদনশীল তথ্য সংরক্ষণের সময়টি localStorageখুব অল্পই (যেহেতু আপনি ট্রান্সসিয়েন্টদের উপর নির্ভর করে ক্রস ট্যাব বার্তা ইভেন্টের জন্য সনাক্তকরণ পরিবর্তন সনাক্ত করে) সুতরাং এই জাতীয় সংবেদনশীল তথ্য ব্যবহারকারীর হার্ড ড্রাইভে ফাঁস হওয়ার সম্ভাবনা কম।

এই ধারণার একটি ডেমো এখানে: http://jsfiddle.net/oypdwxz7/2/


Xryl669 সম্পাদনা করার জন্য আপনাকে ধন্যবাদ, আপনি একটি ভাল পয়েন্ট করেছেন। আমি যখন এখন এটি সম্পর্কে চিন্তাভাবনা করছি তখন কোনও ভাগ করা ওয়েব কর্মী ব্যবহার করা কি ভাল? বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

হ্যাঁ, আপনি কোনও শেয়ারড ওয়ার্কার বা ব্রডকাস্ট চ্যানেল (বা এটির মতো একটি স্থানীয় স্টোরেজ) ব্যবহার করতে পারেন, যদিও প্রথম দুটি এজ এ উপলব্ধ নয়। মূলত, ক্রস ট্যাব, ক্রস উইন্ডো, যে কোনও পদ্ধতি কাজ করবে। অসুবিধাটি সর্বনিম্ন ঝামেলা সহ সর্বত্র কাজ করে এমন একটি সন্ধান করছে।
xryl669

1

ব্রাউজারটি বন্ধ করার শনাক্ত করার কোনও উপায় নেই তাই সম্ভবত আপনি ব্রাউজার বন্ধে লোকালস্টোরেজ মুছতে পারবেন না তবে আপনি যে জিনিসগুলি সেশনকুইজগুলি ব্যবহার করতে পারেন তা পরিচালনা করার অন্য উপায় আছে কারণ এটি ব্রাউজার বন্ধ হওয়ার পরে ধ্বংস হয়ে যাবে his এটি আমি আমার প্রকল্পে বাস্তবায়ন করেছি।



-5

স্থানীয় সঞ্চয়স্থান মোছার জন্য আপনি নিম্নলিখিত কোডগুলি চেষ্টা করতে পারেন:

delete localStorage.myPageDataArr;

29
লোকালস্টোরেজ কী মুছে ফেলার এটি সঠিক উপায় নয়। আপনার localStorage.removeItem(key);কীটি মুছতে ব্যবহার করা উচিত ।
এমটি

1
লোকালস্টোরেশন.আরমোভ আইটেম (কী) ব্যবহার করা উচিত; মুছে ফেলুন কীওয়ার্ড না।
রব ইভান্স

@MT। কেন ব্যবহার করছেন না delete? আমি চেষ্টা করেছি, এবং এটি কার্যকর। এর কোনও পার্শ্ব প্রতিক্রিয়া বা এমন কিছু আছে যা আমাদের মুছে ফেলা উচিত নয়? ধন্যবাদ.
ব্যবহারকারী 1995781

2
@ ব্যবহারকারী 1995781 ব্যবহার deleteকরা সর্বোত্তম অনুশীলন নয়localStorage
Justmyfreak 2

1
@justmyfreak এটি একটি উত্তর নয়
alvitawa
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.