2011-06-29 18 views
-1

在我的應用程序(*)中,我有時需要打開(在默認用戶瀏覽器中)帶有一些參數的URL。使用友好的URL來避免緩存問題

在某些計算機上,我有緩存的問題,就算我送不同的參數,瀏覽器將使用舊參數打開頁面。

我試圖添加時間戳作爲第一個參數:

但儘管如此,對某些電腦沒有解決問題。

我不知道是否使用友好的URL將有助於避免對所有用戶,所有的瀏覽器,所有默認設置等緩存問題

[我使用友好的URL源:

]

您使用傳遞參數的這種方法知道任何DIS-優勢?

感謝,

Atara。

(*)我的應用程序是一個exe文件(VB .NET) 一個應用程序的菜單選項,在打開的URL,使用用戶默認瀏覽器:

'-- Create temporary *.url file and open it 
    Try 
    Dim line1 As String = "[InternetShortcut]" 
    Dim line2 As String = "URL=" & sUrl 
    Dim dst As String = GetSystemPathTemp() & "myAppTemp.url" 

    Dim sw As New System.IO.StreamWriter(dst, False) 
    sw.WriteLine(line1) 
    sw.WriteLine(line2) 
    sw.Close() 

    System.Diagnostics.Process.Start(Chr(34) & dst & Chr(34)) 

的網址是一種形式,參數是表單的一些字段,所以用戶不必輸入它們。

通常用戶填寫表單並重新定向到「謝謝」頁面。

我的問題:下次用戶點擊菜單並打開URL \ form時,根據當前應用程序階段應該有不同的字段值,但是在某些計算機\用戶\瀏覽器中第一次URL被緩存,之後,所有表單都填入了初始字段,所以用戶需要手動編輯它們(如果他注意到了問題),否則我得到的表單結果中包含不準確的信息 - 新用戶注意到先前錯誤的字段值。

我的表單頁面,現在開始用 -

<?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 

直到今天,它開始與所有下面的選項 -

<?php 
//disable all browser caching MUST BE FIRST LINES WITH NO PRECEEDING SPACES ETC 
// Date in the past 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 

// always modified 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 

// HTTP/1.1 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 

// HTTP/1.0 
header("Pragma: no-cache"); 

文件「myAppTemp.url」被更新,但瀏覽器中打開舊的鏈接。

+3

我不能相信,如果URL是完全不同的瀏覽器使用緩存響應。什麼瀏覽器顯示這種行爲? – Gumbo

+0

當我使用具有不同參數的相同URL時,瀏覽器使用緩存響應。這就是爲什麼我想使用不同的網址。 – Atara

+1

請解釋流程,打開url(應用程序或網頁)的方式,如何加載它(XHR或常規頁面)以及用戶如何觸發它。 – jishi

回答

2

解決高速緩存問題的URL不是要走的路。該URL應代表訪問內容的方法,僅此而已。

最終,您永遠無法完全解決客戶端緩存問題,因爲他們可以做任何他們想做的事情。然而,用一些有意思的標題,你會很好。

<?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 
?> 

來源:http://php.net/manual/en/function.header.php

+0

我的頁面中已經有這樣的行。但是,當我用不同的參數重新打開表單時,瀏覽器的地址欄未顯示正確的信息。我想我可以在瀏覽器設置中控制它,但我不能告訴我的用戶也改變他們的設置 – Atara

+0

@Atara,你的意思是地址欄沒有顯示正確的信息? – Brad

+0

當我打開第一個網址時,我可以在地址欄中看到它,例如http://www.mySite.com/myPage.php?p1=p11&p2=p22,我填寫表格,並重定向到另一頁。但是當我嘗試打開第二個網址時http://www.mySite.com/myPage.php?p1=p333&p2=p444地址欄顯示第一個網址[與p11,p22],而不是正確的值[p333,p444] – Atara

0

我認爲你正在尋找錯誤的答案。如果查詢字符串不同,客戶端永遠不會加載緩存的數據,但是如果內容(包含鏈接的頁面)被緩存,那麼即使您希望參數發生更改,也會再次請求相同的數據。

這可能是一個問題,如果你在pageload動態生成URL。一旦用戶導航離開該頁面,然後返回,它將在頁面上具有相同的URL,因爲THAT頁面已被緩存。

編輯:

我認爲你可以繞過的.url文件的創建,因爲HTTP連接的Windows支持直接開口,讀這篇文章:http://support.microsoft.com/kb/305703

這樣,你至少消除一個誤差源爲你的問題。

+0

我編輯了我的問題。在某種程度上,我會離開頁面(到「謝謝」頁面),當用戶再次單擊我的菜單時,我會重新打開原始URL,但現在使用不同的參數。 – Atara

+0

我編輯了我的答案。 – jishi

+0

直到我們在Windows Vista上收到Win32Exception時,我們直接使用這個打開的URL。 – Atara