zoukankan      html  css  js  c++  java
  • 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

    ----文中如有错误,欢迎提出,以便及时更正,共同进步!------

  • 相关阅读:
    STM32 -- 硬件知识
    PCIe相关的操作命令
    [转载]PCI/PCIe基础——配置空间
    [转载]网络虚拟化中的 offload 技术:LSO/LRO、GSO/GRO、TSO/UFO、VXLAN
    [转载]TSO、UFO、GSO、LRO、GRO和RSS介绍
    Linux应用函数 -- 字符串
    初级PLC
    中断方式下进行串口通讯的正确方法
    [altium] Altium Designer2013 13.3.4 (10.1881.28608) 完美版
    32个最热CPLD-FPGA论坛
  • 原文地址:https://www.cnblogs.com/BraveApple/p/10511619.html
Copyright © 2011-2022 走看看