解決:在點選使用者退出登入時,再按瀏覽器的後退按鈕,仍然能夠看到之前的頁面...

fackyou200發表於2014-05-14

 

需要在伺服器返回的response header裡面設定Cache-control為"no-cache, no-store",而不是在頁面中新增META

 

response.setHeader("Cache-Control","no-cache,no-store");     
response.setHeader("Pragma","no-cache");     
response.setDateHeader ("Expires", -1); 

 ================================================================================

轉:http://blog.163.com/xiaokangzhijia@126/blog/static/16595485620106171354509/

 

 

方法如下:

一、

1.當你點選退出系統是,不直接返回登入介面,而是通過window.location.href返回登入介面。
2..或者在每張頁面都有session判斷,如果session為空則返回登入介面

二、

1.瀏覽器快取
   我們有時候會發現是退出系統了可是通過歷史記錄或者直接訪問地址,最後一次操作的資料或顯示的列表還在那裡,一堆人在冒汗,說你係統不安全!
   其實這時候並沒有訪問到系統,是本地的瀏覽器快取在做怪。
2.沒有做許可權攔截
   很多人在做程式的時候可能會忘記去注意許可權分配了,有些功能是要求使用者在登入狀態下使用的,甚至是某個角色的使用者才可以操作的。如果沒有做這些限制,很容易被人利用,最簡單的就是通過地址直接訪問。

這兩個方面內容是造成問題出現的絕大部分原因.

解決方案:

1.禁止快取

如:jsp
<%
response.setHeader("Pragma","No-Cache");
response.setHeader("Cache-Control","No-Cache");
response.setDateHeader("Expires", 0);
%>

2.利用session在頁面進行攔截

如:jsp原碼

String userid= (String)session.getValue("userid");
if(userid==""||userid==null)//判斷指定session值的存在與否,來檢查是否已經登入
{
  跳轉到提示頁面
}
else
{
  其他主體程式程式碼
}

利用以上兩個方法同時使用,能夠解決大部分問題,包括瀏覽器返回的問題。

3.利用struts配置攔截器
4.涉及許可權的就不能簡判斷有沒有登入了,應該取出使用者的許可權值(一般也建議放入session,避免頻繁訪問資料庫)來判斷是否可以執行,處理思路也和判斷有無登入相同
如:jsp
String level= (String)session.getValue("level");
if(level==""||level==null||!level.equals("1"))//判斷指定session值的存在與否並檢查許可權值
{
  跳轉到提示頁面
}
else
{
  其他主體程式程式碼
}

三、
這裡的方法是千姿百態,有的是更改瀏覽器的歷史紀錄的,比如使用window.history.forward()方法;有的是“用新 頁面的URL替換當前的歷史紀錄,這樣瀏覽歷史記錄中就只有一個頁面,後退按鈕永遠不會變為可用。”比如使用 javascript:location.replace(this.href); event.returnValue=false;

相關文章