Cookie存取中文字符


產生的問題:

在系統用戶管理中,錄入了一個用戶名為中文漢字的用戶(“測試”),在用此用戶登錄系統時,登錄失敗。

在后台中報錯信息如下:

問題根源:cookie存取中文字符需要進行轉碼和解碼

現在來看代碼:在用戶登錄之前進行信息校驗並保存用戶登錄的信息:

Cookie cookie = new Cookie("JEECG_LOGIN_USER_DEPART" + user.getUserName() + "_" + req.getContextPath(), currentDepart.getId());
//設置cookie有效期為一個月
cookie.setMaxAge(3600*24*30);
response.addCookie(cookie);

代碼中的user.getUserName()值為漢字,在此處就會報錯。

正確的寫法如下:

try {
            Cookie cookie = new Cookie("JEECG_LOGIN_USER_DEPART" + java.net.URLEncoder.encode(user.getUserName(),"utf-8") + "_" + req.getContextPath(), currentDepart.getId());
            //設置cookie有效期為一個月
            cookie.setMaxAge(3600*24*30);
            response.addCookie(cookie);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

需要對中文進行編碼(java.net.URLEncoder.encode(user.getUserName(),"utf-8"))

這是在cookie里面存漢字,那如何取出使用呢?

代碼如下:

 1 try {
 2                 Cookie[] cookies = req.getCookies();
 3                 for (Cookie cookie : cookies) {
 4                     if (cookie == null || StringUtils.isEmpty(cookie.getName())) {
 5                         continue;
 6                     }
 7                     //cookie解碼
 8                     if (URLDecoder.decode(cookie.getName(),"utf-8").equalsIgnoreCase("JEECG_LOGIN_USER_DEPART" + user.getUserName() + "_" + req.getContextPath())) {
 9                         cookieDepartId = cookie.getValue();
10                         break;
11                     }
12                 }
13             } catch (Exception e) {
14             }

在第8行代碼展示的就是對cookie里面的值取用時應該先進行解碼。

最終中文用戶名登錄成功!

 

備注:在cookie里面含有空格時也會報錯,可以試着編碼轉碼來解決一下,或者.trim()進行處理一下。

參考文檔:https://blog.csdn.net/lskyo1122/article/details/60963052

----文中如有錯誤,歡迎提出,以便及時更正,共同進步!------

 


免責聲明!

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



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