2013-09-25 24 views
0

我的項目中的會話有問題。
當我登錄我犯了一個會話關閉在java服務器頁面的會話問題

session.setAttribute("userid",userid); 

,當我註銷我已經註銷頁面:

<html> 
<head> 
<title>Logged out</title> 
</head> 
<body bgcolor="#CCFFFF"> 
    <%@ page errorPage="errorpage.jsp" language="java" %> 
    <% 
    session.invalidate(); 
    %> 
     <center> 
    <BR><BR><BR><BR><b>You have logged out successfully. 
     <BR><BR>Return to Exam Portal? <a href="signup.html">Click here</a></b> 
     </center> 
</body> 
</html> 

而且在每一頁我檢查,如果會議是由包括頭文件無效或不如:

<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*,java.util.*" errorPage="" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>Online Exam Portal</title> 
</head> 
<body> 
<% 
if(session.getAttribute("userid")==null) 
{ 
%> 
<jsp:forward page="signup.html"/> 
<% 
} 
%> 
<img src="exam_header01.jpg"/> 
<br /> 
Welcome <%=session.getAttribute("userid")%> 
<a href="ChangePassword.jsp">Change Password</a> 
<a href="logout.jsp">Logout</a> 

<hr/> 

我每次簽到瀏覽網頁和註銷我正在重定向到註冊頁面,甚至當我試圖通過URL或pressi之後的任何鏈接進入納克後退按鈕我正在重定向預計
但問題是:
按後退按鈕,並刷新頁面3次後,我得到一個消息:

顯示該網頁再次在網絡瀏覽器需要請重新發送您之前提交的 信息 然後我將會話恢復。 那麼有沒有解決這個問題的方法。
謝謝你在前進

回答

1

這是不是與你的會議,但一個問題,你如何處理你的應用程序POST請求的問題。當您執行POST請求時,瀏覽器將表單數據發送到瀏覽器。如果您使用瀏覽器導航返回嘗試刷新頁面,則瀏覽器嘗試向服務器發送相同請求,並且由於最後一個請求是POST請求,瀏覽器會警告您它將再次重新發送表單數據。瀏覽器顯示此警告以確保您確實想要再次提交表單,並希望您明確地說出Yes(除非您知道自己在做什麼/會產生什麼後果,否則應該始終說出No)。

那麼爲什麼瀏覽器然後要求確認刷新重新提交?

假設您正在購物網站中,並且已經在您的購物車中放置了一些文章並點擊了Buy now!進行了檢查。表單數據被髮送到服務器,你會得到確認和錢的變化口袋。現在你回去做一次刷新 - 假設你的購物車現在是空的 - 會發生什麼?瀏覽器發送另一個Buy now!,你真的想要嗎?我不認爲!通常,只有當您點擊Buy now!時,您纔想購買商品,而不是因爲您剛剛刷新了頁面。

另一個與認證有關的例子。假設您正在瀏覽需要進行身份驗證的站點(例如用戶名/密碼)。完成後,您擊中了log out。那麼你將電腦留給另一個人。那個人然後使用瀏覽器導航回到登錄頁面,然後點擊刷新,會發生什麼?瀏覽器詢問/警告它將再次發送表單數據,這恰好是您的認證信息。現在另一個人可以用你的身份瀏覽網站。你真的想要嗎?我不這麼認爲。

因此總而言之,在POST請求後直接寫入響應的輸出是一種糟糕的做法。相反,您需要觸發重定向,以便瀏覽器可以通過發送GET請求自行請求下一頁。

這一模式被稱爲POST/Redirect/GET

+0

非常感謝您的寶貴時間:) –

+0

@NawedShaikh,歡迎你! – A4L