首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JSP 驗證碼 Session 同步問題:首次請求取不到值的原因與解決

     編輯:程式設計綜合問答

現象

頁面 A 生成驗證碼圖片並存入 session.setAttribute("code", "1234")。頁面 B 以 <img src="A.jsp"> 載入圖片,同時讀取 session.getAttribute("code") 顯示為 null;重新整理後才正確。

原因

  • 瀏覽器載入 <img> 發起**獨立請求**,若 Session ID 透過 Cookie 傳遞,首次請求可能尚未建立 Session(或 Cookie 未送達)。
  • 頁面 B 渲染時,圖片請求可能尚未完成寫入 Session,導致讀取到舊值或 null。

解決方案

  1. 統一入口:在頁面 B 的 Controller/Filter 中預先生成驗證碼存入 Session,再轉發到 JSP;JSP 僅負責顯示 <img src="CaptchaServlet">。
  2. AJAX 輪詢:頁面載入後定時 $.get("/checkSession") 直到 Session 有值再顯示圖片。
  3. 隱藏表單欄位:生成圖片時同時將驗證碼以 <input type="hidden" name="captcha" value="${sessionScope.code}"> 傳回,前端提交時攜帶。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved