এএসপি.এনইটি থেকে সমস্ত ব্রাউজারের জন্য ব্রাউজারের ক্যাচিং অক্ষম করা হচ্ছে


87

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

এই সমস্যাটি সম্পর্কে সেখানে প্রচুর পরিমাণে তথ্য রয়েছে তবে আমি এখনও একটি ভাল রেফারেন্স খুঁজে পাইনি যা প্রতিটি পদ্ধতির সুবিধার বর্ণনা করে এবং কোনও নির্দিষ্ট প্রযুক্তি কোনও উচ্চ স্তরের এপিআই দ্বারা ছাড়িয়ে গেছে কিনা describes

আমি বিশেষত এএসপি.নেট 3.5 এসপি 1 তে আগ্রহী তবে পূর্ববর্তী সংস্করণটির উত্তরও পাওয়া ভাল হবে।

এই ব্লগ এন্ট্রি ফায়ারফক্স এবং আই ক্যাচ মধ্যে দুটি গুরুত্বপূর্ণ পার্থক্য কিছু HTTP প্রোটোকল আচরণের পার্থক্য বর্ণনা করে।

নীচের নমুনা কোডটি আমি কীভাবে আগ্রহী তা চিত্রিত করে

public abstract class NoCacheBasePage : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        DisableClientCaching();
    }

    private void DisableClientCaching()
    {
        // Do any of these result in META tags e.g. <META HTTP-EQUIV="Expire" CONTENT="-1">
        // HTTP Headers or both?

        // Does this only work for IE?
        Response.Cache.SetCacheability(HttpCacheability.NoCache);

        // Is this required for FireFox? Would be good to do this without magic strings.
        // Won't it overwrite the previous setting
        Response.Headers.Add("Cache-Control", "no-cache, no-store");

        // Why is it necessary to explicitly call SetExpires. Presume it is still better than calling
        // Response.Headers.Add( directly
        Response.Cache.SetExpires(DateTime.UtcNow.AddYears(-1));
    }
}

4
আমি উত্তর দেওয়ার চেষ্টা করব যদি আমি জানতাম না যে আপনার কাজটি কতটা ভয়াবহভাবে অসম্ভব। ক্লায়েন্টের ক্যাশে নিয়ন্ত্রণ করা আসবাবপত্র পুনরায় সাজানোর জন্য 10 ফুট দীর্ঘ চপস্টিক ব্যবহার করার চেষ্টা করার মতো।
জেফ মিটবল ইয়াং

সমস্যার পুরো অংশ জুড়ে থাকা পুরো উত্তরগুলি এখনও খুব মূল্যবান হবে। আপনার 2 সেন্ট মূল্যের মধ্যে নিক্ষেপ করুন।
মার্টিন হোলিংসওয়ার্থ

উত্তর:


98

এটি আমরা এএসপি.নেটে ব্যবহার করি:

// Stop Caching in IE
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

// Stop Caching in Firefox
Response.Cache.SetNoStore();

এটি ফায়ারফক্স এবং আইইতে ক্যাচিং বন্ধ করে দেয় তবে আমরা অন্যান্য ব্রাউজারগুলি চেষ্টা করি নি। নিম্নলিখিত প্রতিক্রিয়া শিরোনাম এই বিবৃতি দ্বারা যুক্ত করা হয়:

Cache-Control: no-cache, no-store
Pragma: no-cache

4
+1 এটি ক্রোমে আমার জন্য কাজ করছে, অনেক অনেক ধন্যবাদ। আমি রেসপন্স.ক্যাচ.সেটএল্লো রিসপনসইন ব্রাউজার হিস্টরিও (সত্য) ব্যবহার করি; একই পৃষ্ঠার প্রতিটি অনুরোধের জন্য একটি এন্ট্রি সঞ্চয় করার জন্য ইতিহাস এড়াতে।
ড্যানিলোকিও

12
স্পষ্টতই কেউ আবিষ্কার করেছেন যে নো-ক্যাশের সাথে সেটক্যাচিবিলিটি ব্যবহার করা এএসপি.নেট আউটপুট ক্যাশে (সার্ভার-সাইড ক্যাশে) অক্ষম করে। তারা পরিবর্তে সার্ভারঅ্যান্ডনো ক্যাশে বিকল্পটি ব্যবহার করার পরামর্শ দেয়। codeclimber.net.nz/archive/2007/04/01/…
md1337

4
কোড স্নিপেটে মন্তব্যগুলি স্পষ্ট করার জন্য, প্রধান পদ্ধতিটি SetCacheabilitySetNoStoreএকটি আই 6 কাজ। দেখুন কেন এইচটিটিপি প্রতিক্রিয়াতে নো-ক্যাশে এবং নো-স্টোর উভয়ই ব্যবহার করা উচিত?
এডওয়ার্ড ব্রে

4
এফডব্লিউআইডাব্লু ... আইই 10 এর জন্য সেটনস্টোর যুক্ত করা দরকার
ফেলিক্জ

এই পৃষ্ঠাটি যারা পড়ছেন তাদের জন্য যারা https- র মাধ্যমে ডায়নামিক পিডিএফ আউটপুট প্রদান করবেন এবং এই জাতীয় ক্যাশে শিরোনাম স্থাপন করবেন, দয়া করে নীচের আইই 8 এবং নিম্ন ত্রুটি থেকে সাবধান থাকুন: stackoverflow.com/questions/1038707/…
ধান

41

এটির মূল্যের জন্য, আমি কেবল এটি আমার ASP.NET MVC 3 অ্যাপ্লিকেশনটিতে পরিচালনা করতে হয়েছিল। সমস্ত অনুরোধের জন্য এটি পরিচালনা করার জন্য আমি গ্লোবাল.অ্যাসাক্স ফাইলটিতে কোড ব্লকটি ব্যবহার করেছি।

    protected void Application_BeginRequest()
    {
        //NOTE: Stopping IE from being a caching whore
        HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false);
        HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        HttpContext.Current.Response.Cache.SetNoStore();
        Response.Cache.SetExpires(DateTime.Now);
        Response.Cache.SetValidUntilExpires(true);
    }

HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false)আই ই এবং Firefox bith মধ্যে ক্যাশে প্রতিরোধ পার্থক্য তৈরি
মাইকেল Kniskern

4
-1, এই অ্যাপ্লিকেশন_বেগিনআরকুয়েস্ট () এ সেট করার ফলে নো-ক্যাশে শিরোনামগুলি এমন আইটেমগুলির জন্য প্রেরণ করা হবে যা আপনি সম্ভবত ক্যাশে চান (জাভাস্ক্রিপ্ট ফাইল, চিত্র, ইত্যাদি)। আমি এখনও এটি চেষ্টা করে দেখিনি, তবে ওপিটির অবস্থান (এএসপি পৃষ্ঠায় নিজেই শিরোনাম স্থাপন করা) সম্ভবত আরও ভাল।
ইভান হাশ

আমি এই উত্তরটি কাজ করার প্রত্যাশা করছিলাম কারণ এটি এটিকে গ্লাবাল.অ্যাসাক্সে সেট করার সর্বাধিকতম উপায় তবে এখনও কোনও আনন্দ নেই
ল্যাফটোগ

4
@ ইভান, অ্যাপ্লিকেশন_বেগিনআরকেস্ট কেবলমাত্র অনুরোধের জন্য কল করা হবে যা আইআইএস থেকে এএসপি.এনইটি-তে প্রেরিত হয়। অনেক সময় স্ট্যাটিক ফাইল যেমন সিএসএস, জেএস, ইমেজস, ফন্ট ইত্যাদিতে এমন এক্সটেনশন হয় যা আইআইএস থেকে স্ট্যাটিক ফাইল হিসাবে বিবেচিত হয় এবং এএসপি.নেট রানটাইমকে প্রেরণ করা হয় না। যদি আইএসআইএসপি সমস্ত অনুরোধগুলি এএসপি.নেট রানটাইমের কাছে প্রেরণের জন্য সেট করা থাকে, তবে হ্যাঁ, এটি সমস্ত অনুরোধগুলির জন্য প্রযোজ্য, এমনকি যদি ফাইলগুলি স্থিতিশীল থাকে এবং ক্যাশে করা উচিত।
অ্যাডাম Carr

@ অ্যাডাম, জ্ঞান করে তোলে। আমি আমার -1 পূর্বাবস্থায় ফিরব তবে এসও বলেছে আমার ভোটটি লক হয়েছে :-(
ইভান হাশ

2

আমি বিভিন্ন সমন্বয় চেষ্টা করেছি এবং সেগুলি ফায়ারফক্সে ব্যর্থ করেছি। এটি একটি সময় হয়েছে তাই উপরের উত্তরটি ঠিকঠাকভাবে কাজ করতে পারে বা আমি কিছু মিস করেছি।

আমার পক্ষে সর্বদা যা কাজ করে তা হ'ল প্রতিটি পৃষ্ঠার মাথায় নিম্নলিখিতটি যুক্ত করা বা টেমপ্লেটটি (নেট পৃষ্ঠায় মাস্টার পৃষ্ঠা)।

<script language="javascript" type="text/javascript">
    window.onbeforeunload = function () {   
        // This function does nothing.  It won't spawn a confirmation dialog   
        // But it will ensure that the page is not cached by the browser.
    }  
</script>

এটি ব্যর্থ না হয়ে আমার জন্য সমস্ত ব্রাউজারে সমস্ত ক্যাচিং অক্ষম করেছে।


7
এটি করার কী তা নিশ্চিত তা নিশ্চিত নয় তবে এটি দেখতে একটি বড় ফ্যাট হ্যাকের মতো দেখাচ্ছে যা এই ব্রাউজারগুলির যে কোনও একটির পরবর্তী আপডেটে ব্যর্থ হতে বাধ্য।
md1337

এটা তোলে যেমন এ ব্যাখ্যা হচ্ছে web.archive.org/web/20160112095216/http://www.hunlock.com/blogs/... - সংক্ষেপে বলা onbeforeunload ঘটনা ব্যাংক আটকায় এবং পৃষ্ঠা ক্যাশে হচ্ছে দ্বারা ব্যবহার করা হবে বাস্তবায়ন করা হয়।
ChrisW

1

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

আশা করি এইটি কাজ করবে.


0

ব্রাউজার ক্যাশে (ক্রোম কখনও কখনও পৃষ্ঠাগুলি ক্যাশে করে চলেছে) এটির কোনও পার্থক্য রয়েছে কিনা তা দেখার জন্য আমাদের সাইটে নো-স্টোর ট্যাগ যুক্ত করার পরীক্ষা করতে যাচ্ছি। ক্যাচিং কীভাবে এবং কেন কাজ করে তা নথিভুক্ত করার জন্য আমি এই নিবন্ধটি খুব দরকারী বলে খুঁজে পেয়েছি এবং নো-স্টোর নির্ভরযোগ্য না হলে ইটাগের পরবর্তী দিকে নজর রাখবে:

http://www.mnot.net/cache_docs/

http://en.wikedia.org/wiki/HTTP_ETag


0

আরও দেখুন কীভাবে গুগল ক্রোমকে আমার ইনপুটগুলি ক্যাশে করা থেকে বিরত রাখা যায়, যখন ব্যবহারকারীরা আবার ক্লিক করেন তখন লুকানোগুলিকে গুপ্তচরবৃত্তি করে? যা ছাড়াই ক্রোম পুনরায় লোড করতে পারে তবে <input>উপাদানগুলির পূর্ববর্তী সামগ্রী সংরক্ষণ করতে পারে - অন্য কথায়, ব্যবহার autocomplete="off"

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