我有一個奇怪的情況,我希望有人以前可能經歷過這種情況,并且知道可能會導致這種情況發生的情況。
我有一個從 SQL 資料庫訪問資料的 PHP 網站。用戶填寫表單以添加或編輯發布的資料并將資料寫入資料庫。如果用戶正在編輯現有資料,php 將加載表單所需的資料,一旦頁面加載,我將使用 JavaScript 將資料填充到適當的欄位中。
在我測驗過的所有機器和大多數用戶上,所有這些對我來說都是正確的。
但是... 一些用戶報告說他們在表單中沒有看到正確的資料,而是過時的資訊。因此,當這些用戶“編輯”表單時,他們看到的不是資料庫中當前包含的資訊,而是舊資訊。
我的理解是(通常)php 檔案沒有被快取,因為它們是在服務器上執行的,然后最終產品被交給用戶。是否有任何情況可能導致某個用戶在從服務器收到這些“組裝”檔案后以某種方式快取這些檔案,然后在下次加載頁面時重新加載?
例子:
今天,一位客戶正在嘗試使用表單編輯資訊。他們打電話給我是因為一個欄位顯示不正確的東西。
我登錄到我的網站并加載了相同的表單。我的表單顯示了正確的資料(包含在 SQL 資料庫中),而他們的表單顯示了不同的資料。
兩個不同的用戶使用相同的瀏覽器(chrome)查看相同的 php 網頁和相同的表單,這應該顯示相同的資料,但事實并非如此。
我對如何跟蹤此問題并修復它感到困惑。
uj5u.com熱心網友回復:
也許瀏覽器正在快取頁面?
為確保瀏覽器沒有快取,請在 PHP 中嘗試
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>
uj5u.com熱心網友回復:
就像你提到的 PHP 在服務器上執行一樣,所以它們不會被快取。但是,瀏覽器基本上會快取頻繁或最近的表單資料以備后用。讓我們詳細討論一下。
默認情況下,瀏覽器會觀察并記住通過<input>網站上的欄位填寫的所有資訊。這使瀏覽器能夠提供自動完成(即,為用戶已開始輸入的欄位建議可能的完成方式)或自動填充。
這些功能默認啟用,但用戶可以按需禁用此功能。但是,瀏覽器不會快取一些敏感資訊,如密碼等。要禁用此瀏覽器默認快取行為,您可以將該autocomplete屬性設定為"off":
autocomplete="off"
您可以對整個表單或表單中的特定輸入元素執行此操作:
<form method="post" action="/form" autocomplete="off">
[…]
</form>
在表單上設定自動完成有兩個效果。
- 它通知瀏覽器不要保存用戶在表單欄位中輸入的資料以供以后自動完成
- 它可以防止瀏覽器在會話歷史記錄中快取表單資料。當資料被快取一次時,它會在用戶使用相同的表單和相關的輸入欄位時使用。簡而言之,快取的資料被映射到相關的輸入欄位。
但是,需要注意的重要一點是,自動完成行為不適用于登錄表單。即表單包括用戶名和密碼欄位。此外,瀏覽器允許用戶選擇主密碼,瀏覽器將使用該密碼來加密存盤的登錄詳細資訊。出于這個原因,許多現代瀏覽器不支持登錄欄位的 autocomplete="off":
- 如果站點為 a 設定了 autocomplete="off" ,并且表單包含用戶名和密碼輸入欄位,則瀏覽器仍會記住此登錄名,如果用戶同意,瀏覽器將在用戶下次訪問時自動填充這些欄位這一頁。
- 如果站點為用戶名和密碼欄位設定 autocomplete="off",則瀏覽器仍會記住此登錄,如果用戶同意,瀏覽器將在用戶下次訪問該頁面時自動填充這些欄位。
然而,最后但并非最不重要的是,有真正的解決方案來消除這個問題,這就是填寫用戶編輯表單服務器端。即通過PHP。在這種情況下,不會有快取問題的擔憂,一切都會順利進行。IE
<input type="text" value="<?php echo $username; ?>" name="firstname"/>
我希望這個討論對你有幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316299.html
標籤:javascript php sql 缓存
