欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javaweb用戶注銷后點擊瀏覽器返回刷新頁面重復(fù)登錄問題的解決方法

 更新時間:2021年07月04日 15:06:43   作者:pokid  
這篇文章主要為大家詳細介紹了javaweb用戶注銷后點擊瀏覽器返回刷新頁面重復(fù)登錄問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

最近在寫一個購書網(wǎng)站,測試注銷功能時點擊瀏覽器返回刷新瀏覽器,會發(fā)現(xiàn)原本已經(jīng)注銷的用戶又重新登錄了

想了很久在網(wǎng)上也找了很多辦法,不過網(wǎng)上給出的辦法大多是用js實現(xiàn)注銷后禁止用戶點擊游覽器返回

這個辦法雖然可行,但并不是在后臺真正的解決這個問題,有一種防君子不防小人的感覺 

下面把自己實現(xiàn)的方法記錄下來

原理:

注銷后點擊瀏覽器返回刷新瀏覽器其實就是瀏覽器將原來form表單的信息重新發(fā)送了一遍

注銷也就是干掉原來的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");
 } 

當(dāng)注銷后重定向到一個jsp頁面是生成session與原來的session是不同的(jsp頁面session默認是開啟的) 

也就是說注銷后點擊瀏覽器返回刷新的session是新的session,從這個角度出發(fā)思考解決辦法

我在原來的session里放一段數(shù)據(jù),第一次登陸能獲取到這段數(shù)據(jù),注銷后原來的session沒了,點擊瀏覽器返回刷新,新的session里沒有放數(shù)據(jù),獲取的值就是null

將原來的session里的數(shù)據(jù)與新的session值進行匹配,一個有值,一個為null,肯定會匹配失敗,這時可以給用戶友好的提示,讓用戶重新登錄即可。

那么原來session里的數(shù)據(jù)如何在注銷后(注銷了原來的session就沒了)保存呢?考慮在表單里增加一個隱藏域,將原來的session里的數(shù)據(jù)放在該隱藏域中,這樣注銷后點擊瀏覽器返回刷新,瀏覽器會自動把原來session里的數(shù)據(jù)提交一遍,無需自己手動保存(事實上手動保存可能得放在servletContext應(yīng)用上下文中,沒試過)

有點類似于解決表單重復(fù)提交的一種辦法,但是這里不能把原來的session里數(shù)據(jù)干掉,因為注銷前后不是同一個session

具體如下:在login.jsp里

<%
String token=new Random().nextLong()+"";
session.setAttribute("token", token);
%>
<form action="${pageContext.request.contextPath}/servlet/ClientServlet?operation=login" method="post">
<table style="width: 50%;">
<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();
  //解決注銷后后退刷新瀏覽器重復(fù)登錄的問題
  //給一個隱藏輸入域,后臺獲取隱藏域的值
  //注銷后后退刷新瀏覽器會生成新的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秒后轉(zhuǎn)向登錄頁面<meta http-equiv='Refresh' content=2;url="
       + request.getContextPath() + "/client/login.jsp>");
   request.getRequestDispatcher("/client/message.jsp").forward(
     request, response);
   return;
  } 

測試:

登錄

 

注銷后點擊瀏覽器返回刷新,瀏覽器會提示是否重新發(fā)送數(shù)據(jù)

 

點擊重新發(fā)送

 

這樣就解決了注銷后點擊瀏覽器返回刷新用戶重新登錄的問題。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot中的@Configuration注解詳解

    SpringBoot中的@Configuration注解詳解

    這篇文章主要介紹了SpringBoot中的@Configuration注解詳解,Spring Boot推薦使用JAVA配置來完全代替XML 配置,JAVA配置就是通過 @Configuration和 @Bean兩個注解實現(xiàn)的,需要的朋友可以參考下
    2023-08-08
  • 淺談Java中BigDecimal類的簡單應(yīng)用

    淺談Java中BigDecimal類的簡單應(yīng)用

    這篇文章主要介紹了淺談Java中BigDecimal類的簡單應(yīng)用,BigDecimal是由任意精度的整數(shù)非標(biāo)度值和32位的整數(shù)標(biāo)度組成,如果為零或正數(shù),則標(biāo)度是小數(shù)點后的位數(shù),如果為負數(shù),則將該數(shù)的非標(biāo)度值乘以?10的負scale次冪,需要的朋友可以參考下
    2023-07-07
  • MyBatis中的循環(huán)插入insert foreach問題

    MyBatis中的循環(huán)插入insert foreach問題

    這篇文章主要介紹了MyBatis中的循環(huán)插入insert foreach問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 基于JSON和java對象的互轉(zhuǎn)方法

    基于JSON和java對象的互轉(zhuǎn)方法

    下面小編就為大家?guī)硪黄贘SON和java對象的互轉(zhuǎn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 解決MyEclipse6.5無法啟動,一直停留剛開始啟動界面的詳解

    解決MyEclipse6.5無法啟動,一直停留剛開始啟動界面的詳解

    本篇文章是對解決MyEclipse6.5無法啟動,一直停留剛開始啟動界面的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Springboot使用切面功能詳解

    Springboot使用切面功能詳解

    Spring?Boot?是一個基于Spring框架的項目,它簡化了基于Spring的應(yīng)用開發(fā),這篇文章主要介紹了?Spring?Boot?中的切面功能,需要的可以了解下
    2025-01-01
  • mybatis 新增返回id的實現(xiàn)

    mybatis 新增返回id的實現(xiàn)

    Mybatis插入數(shù)據(jù)時,可以通過兩種方式返回生成的ID,兩種方式都需要在實體類中提供userId的getter和setter方法,本文就詳細的介紹一下這兩種方法,感興趣的可以了解一下
    2024-09-09
  • Maven編譯遇到Process terminated問題(四種情況全部解決)

    Maven編譯遇到Process terminated問題(四種情況全部解決)

    這篇文章主要介紹了Maven編譯遇到Process terminated問題(四種情況全部解決),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java.io.File的renameTo方法移動文件失敗的解決方案

    java.io.File的renameTo方法移動文件失敗的解決方案

    這篇文章主要介紹了java.io.File的renameTo方法移動文件失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot實現(xiàn)配置文件的替換

    SpringBoot實現(xiàn)配置文件的替換

    這篇文章主要介紹了SpringBoot實現(xiàn)配置文件的替換,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論