程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> javaweb用戶刊出後點擊閱讀器前往刷新頁面反復登錄成績的處理辦法

javaweb用戶刊出後點擊閱讀器前往刷新頁面反復登錄成績的處理辦法

編輯:關於JAVA

javaweb用戶刊出後點擊閱讀器前往刷新頁面反復登錄成績的處理辦法。本站提示廣大學習愛好者:(javaweb用戶刊出後點擊閱讀器前往刷新頁面反復登錄成績的處理辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是javaweb用戶刊出後點擊閱讀器前往刷新頁面反復登錄成績的處理辦法正文


比來在寫一個購書網站,測試刊出功效時點擊閱讀器前往刷新閱讀器,會發明本來曾經刊出的用戶又從新登錄了 

想了良久在網上也找了許多方法,不外網上給出的方法年夜多是用js完成刊出後制止用戶點擊旅游器前往 

這個方法固然可行,但其實不是在後台真實的處理這個成績,有一種防正人不防君子的感到 

上面把本身完成的辦法記載上去 

道理: 

刊出後點擊閱讀器前往刷新閱讀器其實就是閱讀器將本來form表單的信息從新發送了一遍 

刊出也就是干失落本來的session

// 刊出
 private void logout(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  HttpSession session = request.getSession();
  request.setAttribute("sessionId", session.getId());
  session.removeAttribute("user");
  session.invalidate();
  response.sendRedirect(request.getContextPath() + "/index.jsp");
 } 

當刊出後重定向到一個jsp頁面是生成session與本來的session是分歧的(jsp頁面session默許是開啟的) 

也就是說刊出後點擊閱讀器前往刷新的session是新的session,從這個角度動身思慮處理方法 

我在本來的session裡放一段數據,第一次上岸能獲得到這段數據,刊出後本來的session沒了,點擊閱讀器前往刷新,新的session裡沒有放數據,獲得的值就是null 

將本來的session裡的數據與新的session值停止婚配,一個有值,一個為null,確定會婚配掉敗,這時候可以給用戶友愛的提醒,讓用戶從新登錄便可。 

那末本來session裡的數據若何在刊出後(刊出了本來的session就沒了)保留呢?斟酌在表單裡增長一個隱蔽域,將本來的session裡的數據放在該隱蔽域中,如許刊出後點擊閱讀器前往刷新,閱讀器會主動把本來session裡的數據提交一遍,無需本身手動保留(現實上手動保留能夠得放在servletContext運用高低文中,沒試過)

有點相似於處理表單反復提交的一種方法,然則這裡不克不及把本來的session裡數據干失落,由於刊出前後不是統一個session 

詳細以下:在login.jsp裡

<%
String token=new Random().nextLong()+"";
session.setAttribute("token", token);
%>
<form action="${pageContext.request.contextPath}/servlet/ClientServlet?operation=login" method="post">
<table >
<tr>
<td align="right">姓名:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td align="right">暗碼:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<tr>
<td></td>
<td><input type="submit" value="登錄"></td>
</tr>
</table>
<input type="hidden" name="token" value="${sessionScope.token}">
</form> 

在servlet中,給出友愛提醒偏重定向到登錄頁面 

  HttpSession session = request.getSession();
  //處理刊出後撤退退卻刷新閱讀重視復登錄的成績
  //給一個隱蔽輸出域,後台獲得隱蔽域的值
  //刊出後撤退退卻刷新閱讀器會生成新的session,如許sessionToken獲得為null
  //如許hiddenToken.equals(sessionToken)就必定是false
  String sessionToken = (String) session.getAttribute("token");
  String hiddenToken = request.getParameter("token");
  if (!hiddenToken.equals(sessionToken)) {
   request.setAttribute("message", "您已刊出,請從新登錄,2秒後轉向登錄頁面<meta http-equiv='Refresh' content=2;url="
       + request.getContextPath() + "/client/login.jsp>");
   request.getRequestDispatcher("/client/message.jsp").forward(
     request, response);
   return;
  } 

測試: 

登錄

 

刊出後點擊閱讀器前往刷新,閱讀器會提醒能否從新發送數據

 

點擊從新發送

 

如許就處理了刊出後點擊閱讀器前往刷新用戶從新登錄的成績。

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved