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; }
測試:
登錄
刊出後點擊閱讀器前往刷新,閱讀器會提醒能否從新發送數據
點擊從新發送
如許就處理了刊出後點擊閱讀器前往刷新用戶從新登錄的成績。
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。