1. 程式人生 > >一種防止頁面後退的實現方法(jsp)

一種防止頁面後退的實現方法(jsp)

當用戶退出系統後,如果再重新開啟登入後的頁面,應該跳轉到一個提示使用者未登入的頁面,這很容易做到,只要在jsp頁面的頭部加上驗證session的程式碼既可以。但是由於瀏覽器有快取,可以後退,如果退出系統後後退,則還是可以開啟退出前的使用者頁面。如何禁止後退以後載入快取的頁面呢?

在網上搜到一種方法,就是設定jsp不可快取,程式碼如下:

<%    
  response.setHeader("Pragma","No-cache");    
  response.setHeader("Cache-Control","no-cache");    
  response.setDateHeader("Expires",   0);    
  %>

但是這種方法,只針對ie有效。

後來我想了一個方法:因為後退之後,頁面也是按照html程式碼順尋載入的,比如說頁面頁面中有一段程式碼

<script>

 alert();

</script>

那面後退至該頁面,也會彈出對話方塊。考慮到這一點,那麼我想可以讓頁面判斷是否使用者已登入,如果未登入則用js跳轉至提示頁面。由於後退到快取頁面之後js程式碼還要執行一次,那麼如果使用者未登入,後退至該頁面就會執行跳轉的程式碼。

這時問題又來了,由於後退到達的頁面是完全的html程式碼,不與伺服器交換資料,因此如果直接嵌入jsp程式碼判斷,那麼後退到達頁面中的jsp變數值實際上是上次與伺服器交換資料後的快取值,不會執行jsp程式碼。那麼必須要求用html程式碼與伺服器進行資料交換,也就是用js來與伺服器通訊,這就必須使用ajax了。

如果用dwr框架,則需要用dwr獲取session,dwr獲取session的方法如下:

HttpSession hs = WebContextFactory.get().getSession();

然後判斷session,返回一個值。js根據這個值來判斷是否需要跳轉。

這時候還有一個問題,在頁面中用dwr封裝的函式,預設是非同步操作的。當在頁面中使用dwr的函式與伺服器交換資料時,其他的html程式碼同時在進行載入。這時需要把dwr設定為同步執行,也就是呼叫的dwr函式後面的程式碼,需要等待函式進行完再進行載入。設定方法如下:

dwr.engine.setAsync(false);

該設定僅對當前頁面有效,其他頁面仍然是非同步執行在寫完呼叫的函式後面,再重新設定dwr為非同步操作:

dwr.engine.setAsync(true);

這樣函式執行完之後其他的dwr函式依然是非同步執行。

相關推薦

防止頁面後退實現方法jsp

當用戶退出系統後,如果再重新開啟登入後的頁面,應該跳轉到一個提示使用者未登入的頁面,這很容易做到,只要在jsp頁面的頭部加上驗證session的程式碼既可以。但是由於瀏覽器有快取,可以後退,如果退出系統後後退,則還是可以開啟退出前的使用者頁面。如何禁止後退以後載入快取的頁

頁面加載動畫實現方法

sed javascrip orm load city eee display script bic html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.

快速排序的兩實現方法js

while 交換 splice rt+ dex 進行 return ont mat 快速排序的基本思想:通過一趟排序,將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另外一部分記錄的關鍵字小,則可分別對著兩部分記錄繼續進行排序,以達到整個序列有序的目的。------

快速卷積實現方法

本文基於論文Fast Algorithms for Convolutional Neural Networks,並且整理了相關知識點。 我們首先了解一下傅立葉變換: 對於連續型傅立葉變換的頻域核時域轉換公式: 對於離散的傅立葉變換: 關於傅立葉的理解 可以看這篇文章

稀疏矩陣的實現方法

本文簡單描述了一種稀疏矩陣的實現方式,並與一般矩陣的實現方式做了效能和空間上的對比 矩陣一般以二維陣列的方式實現,程式碼來看大概是這個樣子: // C# public class Matrix { // methods // elements

單例的實現方法

核心方法: typedef void*(*FUNC)(); #define GETINSTANCE(interface, object)\ {\ FUNC func = (FUNC)GetCreateObjectFunc(#interface);\ if(nullptr

App主介面Tab的四實現方法

上一篇我們介紹了 ViewPager 實現 Tab 和 Fragment 實現 Tab,本篇會繼續介紹剩下的兩種。FragmentPagerAdapter+ViewPager 實現 Tab 和 ViewPagerIndicator+ViewPager 實現

android開發中監聽器的三實現方法OnClickListener

宣告:本寶寶的畢業設計是基於Android開發的********    所以對Android開發有用的文章就先轉載過來    對9月份寫論文起一定幫助作用 標籤: Android開發中監聽器的實現有三種方法,對於初學者來說,能夠很好地理解這三種方法,將能更好地增進自己對a

大氣簡單的Web管理陳列版面設計

borde absolut setup hid color 正常的 for pre == 在頁面的設計中,多版面是一種常見的設計樣式。本文命名一種 這種樣式。能夠簡單描寫敘述為一行top,一列左文件夾,剩余的右下的空間為內容展示區。這種樣式,便於高速定位

Delphi中MD5實現方法

file 單元 ava sender shm md5 文章 files admin 原來寫過一個計算MD5的程序,是用了一個叫MD5.pas的單元,使用起來還算簡單,但還有更簡單的辦法,安裝了indy就會有IdHashMessageDigest單元(delphi 7默認安裝

Spring的2.5版本中提供了:p名稱空間的注入瞭解

1. 步驟一:需要先引入 p 名稱空間 * 在schema的名稱空間中加入該行:xmlns:p="http://www.springframework.org/schema/p"(放到applicationContext.xml檔案中) 2. 步驟二:使用p名稱空間的語法 * p:屬性名 =

工業訊號線傳輸方案想法

背景: 目前所在公司主要做電氣成套,工控自動化電櫃,有時候控制檯和裝置之間距離上百米,控制訊號一般只是繼電器的接通訊號,通斷訊號。存在接線過長,抗干擾能力差;接線過多,0.75的線一大把;走線困難,線要架空纏繞等缺點。   設想: 使用兩個終端,之間通過通訊實現互通,實現類

selenium頁面元素定位方法5——表格的定位

被測試html程式碼:<!DOCTYPE html> <html> <body> <table width="400" border="1" id="table"></table> <tr> &l

卷積神經網路入門一種全卷積神經網路LeNet,從左至右依次為卷積→子取樣→卷積→子取樣→全連線→全連線→高斯連線測試 最後,為了檢驗 CNN 能否工作,我們準備不同的另組圖片與標記集不能在訓練

轉載來自:http://blog.csdn.net/maweifei/article/details/52443995 第一層——數學部分 CNN 的第一層通常是卷積層(Convolutional Layer)。輸入內容為一個 32 x 32 x 3 的畫素值陣列。現在

selenium頁面元素定位方法4——jQuery定位

jQuery介紹        jQuery是一個相容多瀏覽器的JavaScript庫,核心是write less,do more。jQuery定位方式實際上是呼叫jQuery庫的查詢功能,主要用於不能良好支援CSS定位方式的瀏覽器。如果頁面本身就引入了jQuery庫操作頁面

JavaScript 系列--JavaScript一些奇淫技巧的實現方法數字格式化 1234567890轉1,234,567,890;argruments 物件(類陣列)轉換成陣列

一、前言 之前寫了一篇文章:JavaScript 系列--JavaScript一些奇淫技巧的實現方法(一)簡短的sleep函式,獲取時間戳 https://www.mwcxs.top/page/746.html 介紹了sleep函式和獲取時間戳的方法。接下來我們來介紹數字格式化1234567890&nb

JavaScript 系列--JavaScript一些奇淫技巧的實現方法數字取整,陣列求和

一、前言 簡短的sleep函式,獲取時間戳:https://www.mwcxs.top/page/746.html 數字格式化 1234567890 --> 1,234,567,890;argruments 物件(類陣列)轉換成陣列: https://www.mwcxs.top/page/749.

Qt之自定義搜索框——QLineEdit裏增加一個Layout,還不影響正常輸入文字好像是比較通吃的方法

too 步驟 set box 文本 csdn sub void 鼠標 簡述 關於搜索框,大家都經常接觸。例如:瀏覽器搜索、Windows資源管理器搜索等。 當然,這些對於Qt實現來說毫無壓力,只要思路清晰,分分鐘搞定。 方案一:調用QLineEdit現

初夏小談:斐波那契三實現方法C語言版第三相信你沒見過

斐波那契數列(Fibonaccisequnce),又稱黃金分割數列。研究斐波那契數列有相當重要的價值,例在現代物理、準晶體結構、化學等領域都有直接的應用。因此研究斐波那契數列也是很有必要的。 今天初夏將為大家帶來計算斐波那契數列第n位的三種方法 第一種利用遞迴的方法計算,程式碼相當簡單,但其

使用函式指標實現狀態機的方法

結構定義  1 struct state_machine { 2     int state; 3      4 }; 5  6 enum {  7     s1, 8     s2, 9     10     sn11 };   假設s1為初始狀態,狀態變遷為s1->s2->