Java中session保存和獲取驗證碼獲取的id不一致問題


前幾個月由於自己學習JAVAEE的一部分內容,於是最近准備自己寫個小項目,於是碰見了一些問題對於一個JAva菜鳥來說,我需要保存下來

什么問題類,就是我在注冊中加入驗證碼而且是中文,四字成語驗證碼,

首先用Java生成驗證碼和驗證碼圖片,調用驗證碼接口,把驗證碼使用session保存在客戶端,並且發送圖片到前端展示,

然后點擊注冊,前端傳遞用戶輸入的驗證碼到后台,后台獲取用戶輸入的驗證碼和用session獲取保存在客戶端的驗證碼對比,正確與否

可是!!!!!!!!!!!!!!!!!!!!!!!可是,可是,可是

// 保存session代碼

request.getSession().setAttribute("code_session", word);

// 獲取session代碼

String userCode_session = (String)request.getSession().getAttribute("code_session");

我保存了,獲取的時候獲取的是空,代碼沒毛病,對於我Java菜鳥來說得要找后台同事幫我,不過人家也郁悶,人家一般用的框架,底層淡忘了,不過說代碼沒毛病啊

同事建議我用cookie保存,可是cookie應該不安全吧,前端JS是可以獲取到的,不過我換是准備試試,先把功能完成

結果!!!!!!!!!!!!!!!!!!!!!!!頁面報500

原來cookie不支持中文保存,我記得前端貌似可以保存中文,后台居然不行,

算了,我用session保存

然后我們打印session的ID來看

// 打印session的ID代碼

request.getSession().getId()

發現兩次ID不是一個ID,保存的session的ID一直沒變,可是獲取的一直在變

花費三四個小時,我兩找到了問題原因,原來人家說是存在跨域問題

於是解決方案

1.前端ajax中加入跨域

$.ajax({
    type: 'POST',
    url: url,
    data: data,
    dataType:'json',
    success: callback,
    error:function(e){
      console.log(e)
    },
    xhrFields: {
      withCredentials: true
    }
  });

2.后台代碼(本接口中加入)

        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));

解決了,美滋滋

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM