精华区 [关闭][返回]

当前位置:月光软件>>讨论区精华>>〖软件开发〗>>● ASP>>★ASP的技巧★>>安全问题>>网页过期的问题

主题:网页过期的问题
发信人: tophua2000(大头鬼)
整理人: dongbao(2002-04-19 17:06:12), 站内信件
防止使用者按上一頁按鈕 
討論區上常有網友問到這個問題, 如何防止使用者按回上一頁按鈕, 為何會問這一個問題? 應該通常是在防止使用者重複 
執行一個應用程式, 例如資料庫的新增, 如果使用者按了回上一頁, 有可能會造成重複新增資料, 今天這篇文章就要介紹 
如何 "盡可能" 的防止使用者按回上一頁 

伺服端防止快取 

首先來看看伺服端的方法, ASP 的 Response 物件提供了幾個網頁快取 (cache) 相關的屬性, 說明如下 

屬性 說明 
CacheControl 判斷代理伺服器 (Proxy Server) 是否快取 ASP 的輸出結果 
Expires 網頁快取的逾期時間 
ExpiresAbsolute 指定網頁快取的逾期時間 


所以如果你要防止網頁被快取, 你可以這麼做 

<%
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = "no-cache"
%> 

利用這個方法, 使用者還是可以回到上一頁, 但由於網頁並沒有被快取, 所以瀏覽器必須重新向伺服器作 Http 請求, 也 
就是這個網頁會被重新整理 (Refresh) 

用戶端防止快取 

你也可以使用用戶端 (Client-side) 的方式, 

<html> 
<head> 
<meta http-equiv="expires" content="0"> 
<meta http-equiv="cache-control" content="no-cache"> 
<meta http-equiv="pragma" content="no-cache"> 
</head> 

和伺服端的方法產生的結果是一樣的, 但有幾點要注意 

Pragma : 當使用安全連結時才使用 Pragma, 如果在非安全連結使用, 那麼效果和 Expires : -1 是相同的, 也就是這個 
網頁還是會被快取, 但會立即逾時 
meta http-equiv 標籤的 cache-control 並不適用於 Internet Explorer 4, 5 版本 
移除工具列 

這個方法是在網路上看來的, 有點趣味所以也介紹一下, 做法是這樣的, 利用 window.open 方法來開新視窗, 然後關掉原 
視窗, 但重點是在開視窗時將工具列移除 

<script language="javascript"> 
<!--
function openWindow(url){
newpage = window.open(url,'newpage','toolbar=no');
newpage.focus();
self.close();
}
//--> 
</script> 
<a href="javascript:openWindow('nextpage.html');">下一頁 

也是一種方法, 但應該很少人會用, 有一點麻煩! 況且按滑鼠右鍵所出現的 Menu 中也有回上一頁的選項, 此法謹防君子 
不防小人! 

使用 location.replace 

Javascript location 物件的 replace() 方法會以指定的網址覆蓋瀏覽器目前瀏覽歷史紀錄, 也就是當你用了這個方法, 
瀏覽器就會忘掉過去曾經瀏覽的紀錄, 就親像你第一次開啟瀏覽器一樣, 上一頁的按鈕是灰的 

你可以這麼做 

<a href="Javascript:location.replace('nextpage.html')">下一頁 

看起來這大概是目前最好的方法! 不過還是有一些缺點, 因為並不是所有的情況都可以套用, 譬如講當你使用 
Response.Redirect 時, 這個方法就派不上用場了! 

可以歸納出一個結論, 就是要完全關閉瀏覽器回上一頁的功能是不可能的 (目前的瀏覽器), 唯一能做的是因時因地制宜, 
結合以上的方法盡可能的防止使用者按回上一頁! 

希望這篇文章對你有幫助! 


----
 ■■■■■■■■■■■■■■
 ■    人背不能怪社会     ■
 ★    人穷不能怪父母     ★
 ★    西安,我的家园   ★
 ■■■■■■■■■■■■■■ 

[关闭][返回]






转载请注明:转载自 月光程序代码网 [ http://www.moon-soft.com ]