前幾個月由於自己學習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"));
解決了,美滋滋