Tarayıcıyı önbelleği temizlemeye zorla


283

Bir siteyi ziyaret ettiğinde, tarayıcı önbelleğini temizleyerek değişiklikleri görüntüleyebilmeleri için sayfama kod yazabilmemin bir yolu var mı?

Kullanılan diller: ASP.NET, VB.NET ve elbette HTML, CSS ve jQuery.


"Önbelleği temizle" için güzel bir çözüm veya geçici çözüm burada bulunabilir: stackoverflow.com/a/43676353/2008111
caramba

Yanıtlar:


350

Bu yaklaşık olarak değişir .cssve .jsdeğişiyorsa, "önbellek bozma" nın bir yolu _versionNoher sürüm için dosya adına " " gibi bir şey eklemektir . Örneğin:

script_1.0.css // This is the URL for release 1.0
script_1.1.css // This is the URL for release 1.1
script_1.2.css // etc.

Veya alternatif olarak dosya adından sonra yapın:

script.css?v=1.0 // This is the URL for release 1.0
script.css?v=1.1 // This is the URL for release 1.1
script.css?v=1.2 // etc.

Nasıl çalışabileceğini görmek için bu bağlantıya göz atabilirsiniz.


10
Bu oldukça iyi bir çözümdür ve derleme sisteminiz tarafından otomatikleştirilebilir (ve olmalıdır). Örneğin Stackoverflow bu yaklaşımı kullanır.
derobert

7
SO şimdi GET argümanlarını kullanıyor.
Saeb Amini

60
Daha iyisi, dosya adını olduğu gibi tutmaktır, ancak sürüm numarasını bir sorgu dizesi parametresi olarak eklemektir script.js?v=1.2. (Veya sürümleri takip etmiyorsanız, sadece son değiştirilen dosyayı kullanın, bu da daha da kolaydır). Önceki yorumcunun ne anlama geldiğinden emin değilim!
Doin

5
Herkes bunu sürüm kontrolü ile nasıl yapıyor? Gerçek bir acı gibi görünüyor.
Shawn

1
@Shawn Version-control akıllıca <link />etiketleri dinamik olarak oluşturabilir ve uygulamanın sürümünü sorgu dizesi parametresi olarak enjekte edebilirsiniz. Alternatif olarak, bazı CMS'lerde ekli bir CMS çapında ayar olarak "istemci kaynakları sürümü" bulunur - sitenin yöneticisi bu sürüm nr değerini manuel olarak artırabilir ve CMS'nin güncellemeleri de otomatik olarak güncellenebilir. Alt satır: dosya URL'lerini dinamik olarak oluşturmanız gerekir.
Jeroen

103

İçine bak önbellek kontrol ve sona META Tag.

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">

Diğer bir yaygın uygulama, istenen dosyaların sonuna sürekli değişen dizeler eklemektir. Örneğin:

<script type="text/javascript" src="main.js?v=12392823"></script>


44
Bu, zaten önbelleğe alınmış olması durumunda çok yardımcı olmaz - önbelleğe alındığından, sunucu sorgulanmaz ve bu nedenle önbelleksiz yanıt veremez. Ayrıca, bu meta etiket gerçekten kullanılmamalıdır, notta belirtildiği gibi, web önbellekleriyle bozulacaktır.
derobert

1
Derobert'in söylediklerini + 1'leyin. İstemcilere ve web önbelleklerine önbellek ilkesi önermek için HTTP üstbilgilerini kullanmak her zaman daha iyidir, ancak bu bile önbelleği yeniden yüklemeye zorlamaz.

4
İkinci çözümünüz için +1. Bazı yönetici bir güncelleştirme yaptıktan sonra önbellek yalnızca ilk kez temizlenmesi gereken bu sorun var. Bu yaklaşım bunu çözmelidir
Jules Colle

Önbelleği tamamen devre dışı bırakmak genellikle çok kötü bir fikirdir.
Ürdün

73

2012 Güncellemesi

Bu eski bir soru ama daha güncel bir cevaba ihtiyacı olduğunu düşünüyorum çünkü şimdi web sitesi önbellekleme daha fazla kontrol sahibi olmanın bir yolu var.

Gelen Çevrim Web Uygulamaları (gerçekten herhangi bir HTML5 web sitesidir)applicationCache.swapCache() elle sayfayı yeniden gerek kalmadan web önbelleğe alınmış sürümünü güncellemek için kullanılabilir.

Bu, Başlangıç ​​Kılavuzu'ndaki HTML5 Kayalarında Uygulama Önbelleğini Kullanma Kılavuzu'nda kullanıcıların sitenizin en yeni sürümüne nasıl güncelleneceğini açıklayan bir kod örneğidir :

// Check if a new cache is available on page load.
window.addEventListener('load', function(e) {

  window.applicationCache.addEventListener('updateready', function(e) {
    if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
      // Browser downloaded a new app cache.
      // Swap it in and reload the page to get the new hotness.
      window.applicationCache.swapCache();
      if (confirm('A new version of this site is available. Load it?')) {
        window.location.reload();
      }
    } else {
      // Manifest didn't changed. Nothing new to server.
    }
  }, false);

}, false);

Ayrıca bkz . Uygulama önbelleğini kullanma fazla bilgi için bkz. Mozilla Developer Network'te .

Güncelleme 2016

Web'de işler hızla değişiyor. Bu soru 2009'da soruldu ve 2012'de soruda açıklanan sorunu ele almanın yeni bir yolu hakkında bir güncelleme yayınladım. 4 yıl daha geçti ve şimdi zaten kullanımdan kaldırılmış gibi görünüyor. Cgaldiolo'ya teşekkürler için .

Şu anda, Temmuz 2016 itibarıyla HTML Standardı, Bölüm 7.9, Çevrimdışı Web uygulamaları bir kullanımdan kaldırma uyarısı içeriyor:

Bu özellik Web platformundan kaldırılma aşamasındadır. (Bu uzun yıllar süren uzun bir süreçtir.) Şu anda çevrimdışı Web uygulaması özelliklerinden herhangi birinin kullanılması kesinlikle önerilmez. Bunun yerine servis çalışanlarını kullanın.

Yani yapar Uygulama önbelleği kullanmak ben 2012 yılında başvurulan bu Mozilla Geliştirici Ağı:

Kullanımdan
kaldırıldı Bu özellik Web standartlarından kaldırılmıştır. Bazı tarayıcılar yine de destekleyebilse de, bırakılma aşamasındadır. Eski veya yeni projelerde kullanmayın. Bunu kullanan sayfalar veya Web uygulamaları her zaman kırılabilir.

Ayrıca bkz. Hata 1204581 - Hizmet çalışanı getirme müdahalesi etkinse AppCache için bir kullanımdan kaldırma bildirimi ekleyin .


1
Bu, bir önbellek bildirim dosyası kullanmanız ve bakımını yapmanız gerektiği anlamına mı geliyor?
Sam

Uyarı: Uygulama Önbelleği (AppCache) arayüzü kullanımdan kaldırıldı
cgaldiolo

59
Peki, 2017 itibariyle şu anki öneri nedir?
Garrett

Bu konuda görülen ana sorun, görüntüleyicinin kullandığı aygıtın önbelleğe alınmış sürümleri kullanmaya devam etmesidir, çünkü kullanıcılar aygıtının dahili belleği dolmaktadır. sayfanın önbelleğe alınmış bir sürümünde takılıp kalıyor ve belgedeki öğeleri güncellemeyecek gibi görünüyor. bu sadece kromda mı oluyor ?? iver üzerinde deneyimli tek tarayıcı bu.
user2585548

4
2017: Hizmet Çalışanlarını Kullanın.
digitai

27

Öyle değil. Bir yöntem, tarayıcıyı yeniden yüklemeye zorlamak için içerik yayınlarken uygun başlıkları göndermektir:

Bir web sayfasının tüm tarayıcılarda önbelleğe alınmadığından emin olun.

İçin arama "cache header" veya SO'daki benzer bir şey ASP.NET'e özgü örnekler bulacaksınız.

Sunucu tarafında üstbilgileri denetleyemiyorsanız, daha az temiz ama bazen tek yol, çağrılan kaynağa rastgele bir GET parametresi eklemektir:

myimage.gif?random=1923849839

2
Dosyaları düzgün bir şekilde versiyonlamak gerçekten daha iyi. Bu oldukça büyük bir bant genişliği kaybıdır ve muhtemelen daha da önemlisi sitenizi çok yavaşlatır.
derobert

8
Bu gerçekten duruma bağlı, değil mi? Bir CMS programlıyorsanız ve değiştirilen tüm kaynakların düzgün bir şekilde güncellendiğinden emin olmanız gerekiyorsa, bazen bu iki seçenekten birinin çevresinde bir yol yoktur.
Pekka

Bunun gibi çözümler olumsuz olarak değerlendirilmelidir. İnternetin CO2 ayak izini mümkün olduğunca düşük tutmak bizim elimizde.
zamanlama

14

İçin statik kaynaklara doğru önbelleğe alma olacaktır sorgu parametreleri kullanmak her dağıtım veya dosya sürümü değeriyle. Bu, her dağıtımdan sonra önbelleği temizleme etkisine sahip olacaktır.

/Content/css/Site.css?version={FileVersionNumber}

İşte ASP.NET MVC örneği.

<link href="@Url.Content("~/Content/Css/Reset.css")?version=@this.GetType().Assembly.GetName().Version" rel="stylesheet" type="text/css" />

Montaj sürümünü güncellemeyi unutmayın.


Bu cevap için teşekkürler ama BundleTable'a kaynak eklediğimizde bunu nasıl yapacağız lütfen?
toregua

Benim durumumda, bu sürüm olarak "0.0.0.0" döndürüyordu. MVC uygulamanızın dll sürümünü almak için, bunun yerine bunu kullanın:?version=@ViewContext.Controller.GetType().Assembly.GetName().Version
CGodo

1
Bunun Firefox ve Chrome'un içeriği tamamen önbelleğe almasını engellediğini fark ettim.
Sam

10

Benzer bir sorunum vardı ve bunu şu şekilde çözdüm:

  1. Gelen index.htmldosyanın ben apaçık ekledik:

    <html manifest="cache.manifest">
  2. In <head>bölümünde komut önbelleği güncelleme dahil:

    <script type="text/javascript" src="update_cache.js"></script>
  3. In <body>bölümünde ben işlevi onload ekledikten:

    <body onload="checkForUpdate()">
  4. Gelen cache.manifesttüm dosyalar koyduk Ben cache istiyorum. Şimdi benim durumumda (Apache) sadece "sürüm" yorum her zaman güncelleyerek çalışması önemlidir. Ayrıca, dosyaları "? Ver = 001" veya adın sonunda bir şeyle adlandırmak için bir seçenektir, ancak gerekli değildir . Değiştirme yalnızca # version 1.01önbellek güncelleme olayını tetikler.

    CACHE MANIFEST
    # version 1.01
    style.css
    imgs/logo.png
    #all other files

    Yalnızca index.html dosyasına 1., 2. ve 3. noktaları dahil etmek önemlidir . Aksi takdirde

    GET http://foo.bar/resource.ext net::ERR_FAILED

    her "alt" dosya, sayfa önceden önbelleğe alınırken sayfayı önbelleğe almaya çalıştığı için oluşur.

  5. Gelen update_cache.jsdosyanın Bu kodu hazırladık:

    function checkForUpdate()
    {
        if (window.applicationCache != undefined && window.applicationCache != null)
        {
            window.applicationCache.addEventListener('updateready', updateApplication);
        }
    }
    function updateApplication(event)
    {
        if (window.applicationCache.status != 4) return;
        window.applicationCache.removeEventListener('updateready', updateApplication);
        window.applicationCache.swapCache();
        window.location.reload();
    }

Şimdi dosyaları değiştiriyorsunuz ve manifest'te sürüm yorumunu güncellemelisiniz. Şimdi index.html sayfasını ziyaret ettiğinizde önbellek güncellenecektir.

Çözümün parçaları benim değil ama onları internet üzerinden buldum ve işe yarayacak şekilde bir araya getirdim.


CACHE.MANIFEST'in nerede yazıldığını öğrenebilir miyim?
Shweta Gulati

1
Shweta Gulati Manifest dosyası "index" dosyası ile aynı klasörde olmalıdır. Ne zaman işe yaramıyor?
Wojtek Mazurek

1
@ShwetaGulati Evet, önbellek html dosyalarındaki değişiklikleri algılamaz - bu nedenle bildirim dosyasındaki sürüm numarasını güncellemeniz gerekir, çünkü değişiklikler denetlenir. Size yardım etmek gerçekten zor, çünkü detayları bilmiyorum. Lütfen, önbelleğe alınmak istediğiniz tüm dosyaları bildirime ekleyip eklemediğinizi söyleyin? Yol, bildirim dosyasına göreli olmalıdır. Bana web sitenizin adresini verebilir ve sorunun ne olduğunu söyleyebilirim :)
Wojtek Mazurek

1
@ShwetaGulati Çünkü tarayıcı, sayfanın daha hızlı yüklenmesini sağlamak için bazı dosyaları otomatik olarak önbelleğe alır. Bu varsayılan davranıştır ve yalnızca tarayıcıya bağlı olduğundan, hiçbir şekilde ayarlayamazsınız. Özellikle js dosyaları tarayıcı kapsamındadır, çünkü genellikle web sitesindeki tüm sayfalarda kullanılırlar, bu yüzden onları önbelleğe almak akıllıca olur. Tüm dosyaları önbelleğe almak için tüm dosyaların adlarını manifest dosyasına yazmaktan başka bir yol yoktur. Eğer bulursan, söyle bana, çünkü ben de ihtiyacım var :)
Wojtek Mazurek

1
Dosyalarınızın mutlak yolu önemli değil. Adres meselelerinin göreceli yolu, tarayıcının dosyalara istek göndermesine neden oluyor. F.ex: Etki alanı example.com'um var ve serwer names.com'da. Üzerindeki alanım example.names.com. Bu yüzden example.com alanımı sunucu alanı example.names.com'a yönlendirme olarak katıyorum. Bunu yapmak için klasörü bu yönlendirmenin hedefi olarak ayarlamam gerekiyor. Example.names.com üzerinde birden fazla sitem olmasını istiyorsam "name1" klasörü oluşturuyorum, yeniden yönlendirmeyi ayarlayıp tüm dosyalarımı içeri koyuyorum. Yollar buradan sayılır. Manifest dosyasında name1 \ scripts \ test.js varsa scripts \ test.js yazarım.
Wojtek Mazurek

7

Çevrimiçi müşterilerin fotoğraflarını çekeceğim ve bir fotoğraf değiştirilirse div'i güncellemem gereken bir durum vardı. Tarayıcı hala eski fotoğrafı gösteriyordu. Bu yüzden her seferinde benzersiz olacak rastgele bir GET değişkeni çağırma hackini kullandım. İşte kimseye yardım ederse

<img src="/photos/userid_73.jpg?random=<?php echo rand() ?>" ...

DÜZENLEME Başkaları tarafından işaret edildiği gibi, görüntüleri yalnızca değiştirildiklerinde yeniden yükleyeceği için bu çok daha verimli bir çözümdür ve bu değişikliği dosya boyutuna göre tanımlar:

<img src="/photos/userid_73.jpg?modified=<? filemtime("/photos/userid_73.jpg")?>"

29
Bu hiç de zarif değil, sitenin kaynakları indirmek için çok fazla zaman harcayarak görüntüyü yeniden yüklemesini sağlar, rastgele bir sayı yerine dosya boyutunu kullanmak daha iyi bir çözümdür , bu önbellek yalnızca dosya gerçekten yeniden doğrulandığında değişiklikler
Roberto Arosemena

8
Ya da görüntü baytlarının bir karması
Taylor Edmiston

1
Her şey bir kullanıcının gereksinimlerine bağlıdır. Çok sayıda fotoğraf senaryosu için birkaç fotoğraftan farklı olurdu. Dosya boyutunu kontrol etmek bant genişliğini koruyacak, ancak sayfa yüklemesini yavaşlatacak şekilde ek işlemler ekleyecektir. Resimlerin oldukça sık değiştiği ve kullanıcının en güncel olanları almasının kritik bir iş kararı olduğu durumumda, bu mükemmel bir çözümdü.
Zeeshan

Konfigürasyonda bile statik bir değer yapabilirsiniz, bu kesinlikle ideal bir yaklaşım değildir.
Seer

3
<img src = "/ photos / userid_73.jpg? değiştirildi = <? = filemtime (" / photos / userid_73.jpg ")?>" çok daha yararlı olur!
Fusca Software

4

Pek çok cevap eksik - çoğu geliştirici önbelleği kapatmanın verimsiz olduğunun farkında. Ancak, verimliliğin önemsiz olduğu ve varsayılan önbellek davranışının kötü bir şekilde bozulduğu birçok yaygın durum vardır.

Bunlar, iç içe geçmiş yinelemeli komut dosyası sınamalarını (büyük olanı!) Ve bozuk üçüncü taraf yazılım çözümlerini içerir. Burada verilen çözümlerin hiçbiri bu tür ortak senaryoları ele almak için yeterli değildir. Çoğu web tarayıcısı çok agresif önbellekleme özelliğine sahiptir ve bu sorunları önlemek için hiçbir mantıklı yöntem sunmamaktadır.



2

URL'yi aşağıdaki şekilde güncellemek benim için çalışıyor:

/custom.js?id=1

Kullanıcılara benzersiz bir sayı ekleyerek ?id=ve yeni değişiklikler için bu sayıyı artırarak kullanıcıların CTRL + F5önbelleği yenilemek için basmaları gerekmez . Alternatif olarak, geçerli zamanın karma veya dize sürümünü veya Sonrasındaki eki ekleyebilirsiniz.?id=

Gibi bir şey ?id=1520606295


1

İşte ASP.NET önbelleği ayarlama hakkında MDSN sayfası.

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))
Response.Cache.SetCacheability(HttpCacheability.Public)
Response.Cache.SetValidUntilExpires(False)
Response.Cache.VaryByParams("Category") = True

If Response.Cache.VaryByParams("Category") Then
   '...
End If

1

Bunun gerçekten size yardımcı olup olmayacağından emin değilim, ancak önbelleklemenin herhangi bir tarayıcıda böyle çalışması gerekir. Tarayıcı bir dosya istediğinde, "çevrimdışı" mod olmadığı sürece her zaman sunucuya bir istek göndermesi gerekir. Sunucu, değiştirilme tarihi veya etags gibi bazı parametreleri okuyacaktır.

Sunucu DEĞİŞTİRİLMEDİ için 304 hata yanıtı döndürür ve tarayıcının önbelleğini kullanması gerekir. Etag sunucu tarafında doğrulanmazsa veya değiştirilen tarih geçerli değiştirilme tarihinin altındaysa, sunucunun yeni içeriği değiştirilen tarih veya etags veya her ikisiyle birlikte döndürmesi gerekir.

Tarayıcıya gönderilen önbellek verisi yoksa, davranışın belirsiz olduğunu düşünüyorum, tarayıcı nasıl önbelleğe alındıklarını söylemeyen önbellek dosyası olabilir veya olmayabilir. Yanıtta önbellek parametrelerini ayarlarsanız, dosyalarınız doğru bir şekilde önbelleğe alınır ve sunucu bir 304 hatası veya yeni içerik döndürmeyi seçebilir.

Bu böyle yapılmalı. URL'lerde rastgele parametreler veya sürüm numarası kullanmak, her şeyden çok bir hack gibidir.

http://www.checkupdown.com/status/E304.html http://en.wikipedia.org/wiki/HTTP_ETag http://www.xpertdeveloper.com/2011/03/last-modified-header-vs- sona-başlığını-vs-ETAG'ın /

Okuduktan sonra da bir son kullanma tarihi olduğunu gördüm. Sorun yaşıyorsanız, bir son kullanma tarihi geçmiş olabilir. Başka bir deyişle, tarayıcı bir son kullanma tarihi olduğu için dosyanızı önbelleğe alacağı zaman, bu tarihten önce tekrar istemesi gerekmez. Başka bir deyişle, dosyayı asla sunucuya sormayacak ve hiçbir zaman değiştirilmemiş bir 304 almayacaktır. Son kullanma tarihine ulaşılana veya önbellek temizlenene kadar önbelleği kullanacaktır.

Bu benim tahminim, bir tür son kullanma tarihiniz var ve son değiştirilmiş etags veya bunların bir karışımını kullanmalı ve son kullanma tarihi olmadığından emin olmalısınız.

İnsanlar çok fazla yenileme eğilimi gösterirse ve dosya çok fazla değişmezse, büyük bir son kullanma tarihi ayarlamak akıllıca olabilir.

2 sentim!


1

Benim için çalışan bu basit çözümü (henüz üretim ortamında değil) uyguladım:

function verificarNovaVersio() {
    var sVersio = localStorage['gcf_versio'+ location.pathname] || 'v00.0.0000';
    $.ajax({
        url: "./versio.txt"
        , dataType: 'text'
        , cache: false
        , contentType: false
        , processData: false
        , type: 'post'
     }).done(function(sVersioFitxer) {
        console.log('Versió App: '+ sVersioFitxer +', Versió Caché: '+ sVersio);
        if (sVersio < (sVersioFitxer || 'v00.0.0000')) {
            localStorage['gcf_versio'+ location.pathname] = sVersioFitxer;
            location.reload(true);
        }
    });
}

Html nerede bulunur küçük bir dosya var:

"Versio.txt":

v00.5.0014

Bu işlev tüm sayfalarımda çağrılır, bu yüzden yüklerken localStorage'ın sürüm değerinin geçerli sürümden düşük olup olmadığını kontrol eder ve

location.reload(true);

... önbellek yerine sunucudan yeniden yüklemeyi zorlamak için.

(açıkçası, localStorage yerine çerezleri veya diğer kalıcı istemci depolarını kullanabilirsiniz)

Bu çözümü basitliği nedeniyle seçtim, çünkü yalnızca "versio.txt" adlı tek bir dosyayı tutmak tüm siteyi yeniden yüklemeye zorlayacaktır.

QueryString yönteminin uygulanması zordur ve ayrıca önbelleğe alınır (v1.1'den önceki bir sürüme değiştirirseniz önbellekten yüklenirse, önbelleğin temizlenmediği ve önceki tüm sürümlerin önbellekte tutulduğu anlamına gelir).

Ben biraz acemiyim ve yöntemimin iyi bir yaklaşım olduğundan emin olmak için profesyonel kontrol ve değerlendirmenizi takdir ediyorum.

Umarım yardımcı olur.



0

Kullanılabilecek bir hile vardır. Hile, komut dosyası etiketindeki dosya adına bir parametre / dize eklemek ve dosya değiştiğinde bunu değiştirmek.

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

Tarayıcı "?" Karakterinden sonra gelse de tüm dizeyi dosya yolu olarak yorumlar. parametrelerdir. Şimdi wat olur, bir dahaki sefere dosyanızı güncellediğinizde sadece web sitenizdeki kod etiketindeki sayıyı değiştirin (Örnek <script src="myfile.js?version=1.0.1"></script>) ve her kullanıcı tarayıcısı dosyanın değiştiğini görecek ve yeni bir kopyasını alacaktır.


0

Tarayıcıları önbelleği temizlemeye veya doğru verileri yeniden yüklemeye zorlamak ister misiniz? Stackoverflow, bazı işler açıklanan çözümlerin çoğunu denedim, ama kısa bir süre sonra, sonunda önbellek ve önceki yüklü komut dosyasını veya dosyayı görüntüler. Önbelleği (css, js, vb.) Temizleyecek ve aslında tüm tarayıcılarda çalışacak başka bir yol var mı?

Şimdiye kadar, sunucudaki dosyalarınızdaki tarih ve saati değiştirirseniz, belirli kaynakların ayrı ayrı yeniden yüklenebileceğini buldum. "Önbelleği temizlemek" olması gerektiği kadar kolay değil. Tarayıcılarımdaki önbelleği temizlemek yerine, önbelleğe alınan sunucu dosyalarına "dokunmanın" aslında sunucuda önbelleğe alınan kaynak dosyanın tarihini ve saatini değiştireceğini (Edge, Chrome ve Firefox'ta test edildi) fark ettim ve çoğu tarayıcı otomatik olarak en çok indirilecek Sunucunuzda neyin geçerli yeni kopyası (kod, grafikler herhangi bir multimedya). Programınız çalıştırılmadan önce sunucudaki en güncel komut dosyalarını kopyalamanızı ve "dokunma işlemini yap" çözümünü kullanmanızı öneririm , böylece tüm sorun dosyalarınızın tarihini en güncel tarih ve saate değiştirir, ardından yeni bir kopyasını indirir tarayıcınıza:

<?php
   touch('/www/sample/file1.css');
   touch('/www/sample/file2.js');
?>

sonra ... programınızın geri kalanı ...

Bu sorunu çözmem biraz zaman aldı (birçok tarayıcı farklı komutlara farklı davranıyor, ancak hepsi dosya saatlerini kontrol ediyor ve farklı tarih ve saat varsa yenileme işlemini yapacağınız tarayıcınızdaki indirilen kopyanızla karşılaştırıyor), sözde doğru yoldan gidemiyorum, her zaman başka bir kullanılabilir ve daha iyi bir çözüm var. Saygılarımızla ve mutlu kamp. Bu arada touch (); veya alternatifler javascript bash sh php dahil olmak üzere birçok programlama dilinde çalışır ve bunları html içine ekleyebilir veya arayabilirsiniz.


1
dosya değiştirilirse zaman damgası zaten değiştirilir, bu yüzden tekrar zorlamanın bir yararı yoktur.
Fusca Software

Touch komutu dosyayı hiç değiştirmez. Tarih ve saat niteliğini değiştirir ve tarayıcıyı yeni bir kopya olarak indirmek için kandırmak için daha yeni bir sürüme dönüştürür.
Luis H Cabrejo

-1

Önbelleği temizlemek mi yoksa yalnızca geçerli (değiştirilmiş?) Sayfanızın önbelleğe alınmadığından emin misiniz?

İkincisi ise, bu kadar basit olmalı

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

Bu yaklaşımı yakın zamanda bir Chrome yayınında okudum ve Firefox 3.6 ile yalnızca birkaç canlı sunucu, localhost ve Windows dosya paylaşımında tutarlı sonuçlar buldum.
danjah
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.