iT邦幫忙

1

最近網站,因為需要支援IE11、Edge,所以進行javascript微調和HTML的微調

但發現一個問題,IE瀏覽器和Chrome瀏覽器對於快取的機制不太一樣

因為網站會員登入登出功能,當我會員登出會清除session然後跳轉到首頁

但是因為首頁已經被瀏覽器緩存,所以當我清除session然後跳轉到首頁,然後並沒更新,而顯示舊的並未登出的狀態

而Chrome瀏覽器就正常,希望大神能幫忙

PS:網站是用 php 寫的 框架是 laravel

看更多先前的討論...收起先前的討論...
小魚 iT邦高手 1 級 ‧ 2018-12-12 13:42:54 檢舉
IE已經被我放棄了, 加油~
甲土豆 iT邦新手 5 級 ‧ 2018-12-12 13:44:16 檢舉
公司不放棄我沒辦法,腦子超痛
froce iT邦大師 5 級 ‧ 2018-12-12 15:46:43 檢舉
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

試試看
甲土豆 iT邦新手 5 級 ‧ 2018-12-12 15:52:18 檢舉
都試過了 ,都沒用,暫時都找不到方法
PHP方法也都試過
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

2 個回答

0
浩瀚星空
iT邦大師 1 級 ‧ 2018-12-12 17:56:56

其實ie我也放棄了,常常會有一堆有的沒有的問題。
不過就如你說的,還是得要看客戶(公司)臉色吃飯,該解決還是要解決。

以前曾經用過的萬用招式。提供給你參考。
1.href轉址改採用form發送的方式:
這招幾乎不用擔心被援存的問題。可是~~~要改很多地方。很累。
雖然我以前是去綁架a的href事件來處理。

2.如果是只有回首頁會這樣,另一招就是放個隨機碼。
如轉回來首頁的情況是 /index.php 就故意在其後加個?(隨機數值)如 /index.php?546546546
這樣可以騙瀏覽器這是另外一頁。

甲土豆 iT邦新手 5 級 ‧ 2018-12-13 11:13:55 檢舉

1.不好意思你第一個方式用form發送方式可以說具體一點嗎,因為沒用過,form可以當成href嗎
2.第二個方式我也有想過方式,但技術部主管不同意
3.我想問一下javascript有沒有頁面導向後並且刷新頁面的方法或者PHP有這方法嗎,個人暫時找不到

第一個方式,是我早期為了應付跟你同樣的問題。
我會先用一個空的

<form action="" method="post" id="url_href"></form>

然後用jquery將所有的a元件做如下處理

$('a').each(function(){
    $(this).attr('data-url',$(this).attr('href'));
    $(this).attr('href','javascript:void(0)').addClass('url_href');
});

$('.url_href').click(function(){
    $("#url_href").prop('action',$(this).attr('data-url'));
    $("#url_href").submit();
});

這是很早前的方式做法。但會讓瀏覽器認為這是一種請求不會讀取緩存頁。事實上用form的方式,也不會有緩存頁的情況。雖然有時會有另外一個問題存在就是了。

另外你說重新刷新頁面的動作。其實這對你想要的東西並沒有幫助。
ie瀏覽器本身就是有這樣的問題,非常討厭。
我用第一個方式是不得已的。因為只有用post的方式。ie才不會變智障
header什麼的對它都沒用。有時真的很火大。

你可以將上面的程式碼,用個ie唯一使用就好。
只要用ie才去載入該js處理。不是ie的就不需要理他。

因該可以解決你的問題。這是我早期處理ie瀏覽器的方式。(現在是完全放棄他了,只要是用ie就直接跳瀏覽器的下載頁給他們)

0
Luke
iT邦新手 3 級 ‧ 2018-12-13 15:45:37

https://ithelp.ithome.com.tw/upload/images/20181213/200967814cm82zv1Zv.png

IE 上的設定
或者
登出時,將session(ID) 換一個新的,讓 IE 原本紀錄session(ID) 跟伺服器session(ID) 不一樣,也將cookie 清除

Session:儲存於伺服器端,不用擔心用戶禁用session的問題,但計錄檔案的負荷由伺服器承擔。

如果已包含一個session id則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來使用(如果檢索不到,可能會新建一個),
如果已包含一個session id則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來使用。

如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。
保存這個session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發揮給服務器。一般這個cookie的名字都是類似於SEEESIONID。

甲土豆 iT邦新手 5 級 ‧ 2018-12-13 17:38:54 檢舉

大神
第一個方法不可能,我是程式端怎麼能要求客戶照我這樣做
第二方法也不好執行,技術部主管不會同意,網站已經夠大了,速度再給慢下來,我不鞭都不行啊,而且能不改寫正常代碼就不改寫。

我要發表回答

立即登入回答