প্রোগ্রামে খালি ব্রাউজার ক্যাশে কীভাবে?


121

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


3
কোন ব্রাউজারগুলি? আপনার মুছে ফেলার চেষ্টা করে সার্ভার থেকে কী ক্যাশে করবেন না তা ব্রাউজারকে বলার দিকেও লক্ষ্য করা উচিত।
মিচ সফ্টওয়্যার

আপনি এই ক্যাচিংয়ের টিউটোরিয়াল এবং এটি কীভাবে কাজ করে তাও পরীক্ষা করে দেখতে চাইতে পারেন। mnot.net/cache_docs ক্যাশে নিয়ন্ত্রণ শিরোলেখ এবং এর মতো স্টাফগুলি covers েকে রাখে
স্ক্র্যাপডকোলা

@ মেকসফটওয়্যারটি আমি দ্রুত পৃষ্ঠা লোডের জন্য ক্যাশে করতে চাই, তবে আমি লগ অফ করার পরে এটি সাফ করতে চাই। যথাসম্ভব ভাল ব্রাউজার সমর্থন।
টাওয়ার

2
@ আরফ্যাক্টর কেউ এমন একটি ব্রাউজার ব্যবহার করবে না যা ওয়েবসাইটগুলিকে এর ক্যাশে নিয়ন্ত্রণ করে।
নাল ইউজারএক্সসেপশন

3
ডি ফ্যাক্টো ওয়েবসাইটগুলির ক্যাশে নিয়ন্ত্রণ রয়েছে কারণ তারা HTTP শিরোনামগুলি নিয়ন্ত্রণ করে।
ডানুবিয়ান নাবিক

উত্তর:


38

এটি সম্ভব, আপনি কেবলমাত্র 'মেটা ট্যাগ' বিকল্পের জন্য jQuery ব্যবহার করতে পারেন যা ইভেন্ট হ্যান্ডলার / বোতামের সাহায্যে ক্যাশের স্থিতির উল্লেখ করে এবং তারপরে রিফ্রেশ, সহজ,

$('.button').click(function() {
    $.ajax({
        url: "",
        context: document.body,
        success: function(s,x){

            $('html[manifest=saveappoffline.appcache]').attr('content', '');
                $(this).html(s);
        }
    }); 
});

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


এটি কি কেবল এইচটিএমএল 5 বৈশিষ্ট্য?
জন নাগলে

আমি তাই বলব, এবং আমি এটিও বিশ্বাস করি এটির জন্য সার্ভার কনফিগারেশনও প্রয়োজন (অ্যাপ্লিকেশন ক্যাশে ম্যানিফেস্ট সেটআপ করতে)। যদিও এই উত্তরটি মূল প্রশ্নের সমাধান দেয় তবে এটি ক্লায়েন্ট- বা সার্ভার-সাইড কোডের মাধ্যমে theতিহ্যবাহী ব্রাউজার ক্যাশে সাফ করা অসম্ভব বলে মনে করে।
এরিক ফুলার

এই পদ্ধতিটি ক্যাশেটিকে বাইপাস করে সামগ্রীটি আপডেট করে বলে মনে হচ্ছে তবে পৃষ্ঠাটি পুনরায় লোড করা হয়ে গেলে এটি পূর্ববর্তী ক্যাশেড সামগ্রীতে ফিরে যায়।
সরল

সার্ভিস ওয়ার্কার্স পক্ষে অবচিত developer.mozilla.org/en-US/docs/Web/HTML/...
nadav

2
পরিষেবা কর্মীরা আইফোনগুলিতে কাজ করে না তাই আপনাকে সেখানে অ্যাপ্লিকেশন ক্যাশেটি ব্যবহার করতে হবে
টনি

159

আছে কোন উপায় একটি ব্রাউজার আপনি তার ক্যাশে সাফ দেওয়া হবে। এটি সম্ভব হলে এটি একটি বিশাল সুরক্ষা সমস্যা হবে। এটি খুব সহজেই আপত্তিজনকভাবে ব্যবহার করা যেতে পারে - কোনও ব্রাউজার যেমন "বৈশিষ্ট্য" সমর্থন করে, আমি আমার কম্পিউটার থেকে এটি আনইনস্টল করার মিনিটেই হবে।

আপনি যা করতে পারেন তা হ'ল উপযুক্ত পৃষ্ঠাটি প্রেরণ করে বা এই মেটা ট্যাগগুলি ব্যবহার করে আপনার পৃষ্ঠাটি ক্যাশে না করা:

<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>

আপনিও ফর্ম ক্ষেত্রগুলিতে স্বয়ংক্রিয়-সম্পূর্ণ বন্ধ করার বিষয়টি বিবেচনা করতে চাইতে পারেন, যদিও আমি ভয় করি যে এটি করার একটি মানক উপায় নেই ( এই প্রশ্নটি দেখুন )।

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

SSL ব্যবহার এছাড়াও তোলে কিছু ব্রাউজার না ক্যাশে ব্যবহার যদি না স্পষ্টভাবে বলা। এই প্রশ্নটি দেখুন ।


8
আমি কেন আমার ব্যবহারকারীদের বিরক্ত করতে আমার ওয়েব অ্যাপের ক্যাশে সাফ করব? ক্যাশেড ব্যক্তিগত ডেটাগুলির ট্রেসগুলি সাফ করতে আমি এটি করতে চাই। যদি আমি ব্রাউজারটিকে ক্যাশে না রাখতে বলি তবে প্রতিবার পৃষ্ঠাটি লোড হওয়ার সাথে সাথে ক্লায়েন্ট-সাইড ডেটা মেগাবাইটের জন্য অনুরোধ করতে হবে, যা আমি করতে চাই না।
টাওয়ার

27
কেউ করবে না, কারণ সম্ভবত এটি সম্ভব হবে না। ঠিক যেমন আপনি অন্য উত্সে স্ক্রিপ্ট চালাতে পারবেন না তার অর্থ এই নয় যে আপনি আপনার উত্সের উপর স্ক্রিপ্ট চালাতে পারবেন না। যদি আপনি কোনও দূরবর্তী উত্সে ক্যাশে সাফ করতে না পারেন, এটি যৌক্তিক তবে আমি কোডটি কার্যকর করানোর কারণে কেন উত্সের ক্যাশে সাফ করতে পারব না? না করার কোনও কারণ নেই, তাই আমি এর কোনও সমাধান আছে কিনা তা দেখছি, তবে দেখে মনে হচ্ছে এটি সম্ভব নয়। আপনি যদি কৌতূহলী হন তবে আমি আপনাকে বলতে পারি যে আমার কাছে প্রচুর সিএসএস, এইচটিএমএল এবং জেএস প্রায় 6 এমবি সংকলিত একটি বড় অ্যাপ্লিকেশন রয়েছে।
টাওয়ার

4
@ আরএফ্যাক্টর এটি অনেক বেশি
নাল ইউজারএক্সসেপশন

14
দয়া করে ব্যাখ্যা করুন কীভাবে বাস্তবায়ন করা যায় না, এটি একটি সুরক্ষা সমস্যা হবে? এটি নিরাপদে প্রয়োগ করা যেতে পারে।
ড্যান

22
গতকাল রাতে আমি পর্যাপ্ত ঘুম পাইনি, কোনও ওয়েব অ্যাপ্লিকেশন যখন ক্যাশে সাফ করতে পারে ( কোনও পরিবর্তন না করে ) তখন এটি কোনও সুরক্ষার সমস্যা হবে ? কীভাবে আপনি এটি কাজে লাগাতে পারেন?
ভোলকার ই।

19

নিজেই এইচটিএমএল ব্যবহার করুন here এমন একটি কৌশল যা ব্যবহার করা যেতে পারে trick কৌশলটি হ'ল স্ক্রিপ্ট ট্যাগের ফাইলের নামের সাথে একটি পরামিতি / স্ট্রিং যুক্ত করা এবং আপনি পরিবর্তনগুলি ফাইল করার সময় এটি পরিবর্তন করা।

<script src="myfile.js?version=1.0.0"></script>

ব্রাউজারটি পুরো স্ট্রিংটিকে ফাইল পথ হিসাবে ব্যাখ্যা করে যদিও "এর পরে কী আসে?" পরামিতি হয়। সুতরাং এখন ঘটবে যখন আপনি নিজের ফাইল আপডেট করবেন তখন আপনার ওয়েবসাইটের স্ক্রিপ্ট ট্যাগের নম্বরটি পরিবর্তন করুন (উদাহরণ <script src="myfile.js?version=1.0.1"></script>) এবং প্রতিটি ব্যবহারকারী ব্রাউজার দেখতে পাবেন যে ফাইলটি পরিবর্তিত হয়েছে এবং একটি নতুন অনুলিপি গ্রহণ করবে।


1
কিছু সার্ভার-সাইড ডায়নামিক ভাষা ব্যবহারকারীদের জন্য, আপনি যদি ফাইলটির ctime(বা mtime) অ্যাক্সেস করতে পারেন তবে আপনি কেবল পিছনের সময়টি যোগ করতে পারেন। উদাহরণস্বরূপ পিএইচপি, myfile.js?v=<?=filectime('myfile.js');?>এবং সেখানে আপনি নিজের সংস্থানগুলির জন্য একটি স্বয়ংক্রিয় আপডেট ক্যাশে পেয়েছেন।
পিয়েরে-এন্টোইন গিলোয়াম

আমি এই কৌশলটি অনেক দিন ব্যবহার করছিলাম। তবে আমি আজ লক্ষ্য করেছি যে, সংস্করণটির অংশটি পরিবর্তন করার পরেও ফাইলটি ক্যাশে থেকে এখনও রেন্ডার করা হচ্ছে। আমি ক্রোম ব্যবহার করছিলাম। সার্ভার থেকে ফাইলটি মুছে ফেলার পরেও এটি প্রদর্শিত হচ্ছিল। কারও কাছে কোনও তথ্য আছে কেন এটি কাজ করবে না?
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ

এই কৌশলটি কাজ করে, স্ট্যাকওভারফ্লো.com
নেভিন

9

সর্বোত্তম ধারণাটি হ'ল নামগুলি সহ জেএস ফাইল তৈরি করা + সংস্করণ সহ কিছু হ্যাশ, আপনার যদি ক্যাশে সাফ করার দরকার হয় তবে কেবল নতুন হ্যাশ দিয়ে নতুন ফাইল তৈরি করুন, এটি নতুন ফাইলগুলি লোড করার জন্য ব্রাউজারকে ট্রিগার করবে


5

ব্রাউজারের ক্যাশে সাফ করার জন্য প্রাথমিকভাবে আমি আমার এইচটিএমএল, জেএসে বিভিন্ন প্রোগ্রামেটিক পদ্ধতির চেষ্টা করেছি। সর্বশেষ Chrome এ কিছুই কাজ করে না।

অবশেষে, আমি .htaccess দিয়ে শেষ করেছি:

<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>

ক্রোম, ফায়ারফক্স, অপেরাতে পরীক্ষিত

তথ্যসূত্র: https://wp-mix.com/disable-caching-htaccess/


4

location.reload (সত্য); ক্যাশে উপেক্ষা করে, বর্তমান পৃষ্ঠাটিকে শক্তভাবে পুনরায় লোড করবে। নতুন ক্রোম, ফায়ারফক্স এবং অপেরার জন্যও
Cache.delete () ব্যবহার করা যেতে পারে।


এই ফাংশনটি ইন্টারনেট এক্সপ্লোরার এবং সাফারি ব্রাউজারের সাথে কাজ করে না। মাইক্রোসফ্ট এজ দিয়ে কাজ করে কিনা তা নিশ্চিত নয়।
কৌতূহল বিকাশকারী

3

Chrome এ, আপনার বেঞ্চমার্কিং এক্সটেনশানটি ব্যবহার করে এটি করতে সক্ষম হওয়া উচিত। আপনার ক্রোমটি নিম্নলিখিত সুইচগুলি দিয়ে শুরু করতে হবে:

./chrome --enable-benchmarking --enable-net-benchmarking 

Chrome এর কনসোলে এখন আপনি নিম্নলিখিতটি করতে পারেন:

chrome.benchmarking.clearCache();
chrome.benchmarking.clearHostResolverCache();
chrome.benchmarking.clearPredictorCache();
chrome.benchmarking.closeConnections();

আপনি উপরের কমান্ডগুলি থেকে বলতে পারেন যে এটি ব্রাউজারের ক্যাশেটি কেবল সাফ করে না, ডিএনএস ক্যাশেও সাফ করে এবং নেটওয়ার্ক সংযোগগুলি বন্ধ করে দেয়। আপনি পৃষ্ঠা লোড টাইম বেঞ্চমার্কিং করার সময় এগুলি দুর্দান্ত। স্পষ্টতই প্রয়োজন না থাকলে এগুলি সমস্ত ব্যবহার করার দরকার নেই (যেমন ক্লিয়ারক্যাশ () আপনার কেবল ক্যাশে সাফ করার প্রয়োজন হলে এবং ডিএনএস ক্যাশে এবং সংযোগগুলি যত্ন নেওয়ার প্রয়োজন নেই) should


2

//The code below should be put in the "js" folder with the name "clear-browser-cache.js"

(function () {
    var process_scripts = false;
    var rep = /.*\?.*/,
    links = document.getElementsByTagName('link'),
    scripts = document.getElementsByTagName('script');
    var value = document.getElementsByName('clear-browser-cache');
    for (var i = 0; i < value.length; i++) {
        var val = value[i],
            outerHTML = val.outerHTML;
        var check = /.*value="true".*/;
        if (check.test(outerHTML)) {
            process_scripts = true;
        }
    }
    for (var i = 0; i < links.length; i++) {
        var link = links[i],
        href = link.href;
        if (rep.test(href)) {
            link.href = href + '&' + Date.now();
        }
        else {
            link.href = href + '?' + Date.now();
        }
    }
    if (process_scripts) {
        for (var i = 0; i < scripts.length; i++) {
            var script = scripts[i],
            src = script.src;
            if (src !== "") {
                if (rep.test(src)) {
                    script.src = src + '&' + Date.now();
                }
                else {
                    script.src = src + '?' + Date.now();
                }
            }
        }
    }
})();
At the end of the tah head, place the line at the code below

    < script name="clear-browser-cache" src='js/clear-browser-cache.js' value="true" >< /script >


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

প্রশংসা করার সময়, এটি ব্রাউজার ক্যাশে সাফ করে না, কেবলমাত্র প্যারাম যুক্ত করে প্রদত্ত পৃষ্ঠায় কোনও লিঙ্ককে ক্যাশে-বস্ট করে বলে মনে হচ্ছে।
ড্যান চেজ

1

আপনি এখন Cache.delete () ব্যবহার করতে পারেন

উদাহরণ:

let id = "your-cache-id";
// you can find the id by going to 
// application>storage>cache storage 
// (minus the page url at the end)
// in your chrome developer console 

caches.open(id)
.then(cache => cache.keys()
  .then(keys => {
    for (let key of keys) {
      cache.delete(key)
    }
  }));

Chrome 40+, ফায়ারফক্স 39+, অপেরা 27+ এবং এজতে কাজ করে।


0

.jsফাইলগুলি স্থাপন করা আছে তা কল্পনা করুন/my-site/some/path/ui/js/myfile.js

তাই সাধারণত স্ক্রিপ্ট ট্যাগটি দেখতে পাবেন:

<script src="/my-site/some/path/ui/js/myfile.js"></script>

এখন এটি পরিবর্তন করুন:

<script src="/my-site/some/path/ui-1111111111/js/myfile.js"></script>

এখন অবশ্যই এটি কাজ করবে না। এটিকে কাজ করতে আপনার .htaccess গুরুত্বপূর্ণ লাইনটিতে একটি বা কয়েকটি লাইন যুক্ত করা দরকার : (সম্পূর্ণ। নীচে htaccess)

RewriteRule ^my-site\/(.*)\/ui\-([0-9]+)\/(.*) my-site/$1/ui/$3 [L]

সুতরাং এটি যা করে তা হ'ল এটি একধরণের 1111111111পথ থেকে সরিয়ে দেয় এবং সঠিক পথে লিঙ্ক করে।

সুতরাং এখন আপনি যদি পরিবর্তন করেন তবে 1111111111আপনাকে যা চান তার সংখ্যায় পরিবর্তন করতে হবে। এবং তবে আপনি নিজের ফাইলগুলি অন্তর্ভুক্ত করেছেন যখন জেএস-ফাইলটি শেষ বার সংশোধন করা হয়েছে আপনি সেই সংখ্যাটি টাইমস্ট্যাম্পের মাধ্যমে সেট করতে পারেন। সুতরাং ক্যাশে সংখ্যা পরিবর্তন না হলে স্বাভাবিকভাবে কাজ করবে। যদি এটি পরিবর্তন হয় তবে এটি নতুন ফাইলটি (হ্যাঁ সর্বদা) পরিবেশন করবে কারণ ব্রাউজারটি সম্পূর্ণ নতুন ইউআরএল পেয়েছে এবং কেবলমাত্র বিশ্বাস করে যে ফাইলটি এত নতুন যে তাকে অবশ্যই তা পেতে হবে।

আপনার জন্য এই ব্যবহার করতে পারেন CSS, faviconsএবং কি কি কখনো ক্যাশে পায়। সিএসএসের জন্য ঠিক তেমন ব্যবহার করুন

<link href="http://my-domain.com/my-site/some/path/ui-1492513798/css/page.css" type="text/css" rel="stylesheet">

এবং এটি কাজ করবে! আপডেট করা সহজ, বজায় রাখা সহজ।

প্রতিশ্রুতি পূর্ণ .htaccess

যদি আপনার কাছে এখনও কোনও .htaccess না থাকে তবে আপনার এটি থাকা সর্বনিম্ন:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^my-site\/(.*)\/ui\-([0-9]+)\/(.*) my-site/$1/ui/$3 [L]
</IfModule>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.