`

Control character in cookie value, consider BASE64 encoding your value

阅读更多
项目当中用到cookie保存中文,但是会报如下错误:

Control character in cookie value, consider BASE64 encoding your value



大概意思是保存到cookie当中的值存在控制字符,无法保存。但实际上数据是不存在这种问题的。再看后面的那句话,好像是将要保存的值进行了base64编码,可能是因为中文在编码时出现乱码导致一些控制字符的出现。



解决方案:将要保存的值进行URLEncoder.encode(value,"utf-8")编码。

在提取时,同样进行解码:

   /**
     * 添加cookie
     * @param response
     * @param name cookie的名称
     * @param value cookie的值
     * @param maxAge cookie存放的时间(以秒为单位,假如存放三天,即3*24*60*60; 如果值为0,cookie将随浏览器关闭而清除)
     */
    public static void addCookie(HttpServletResponse response, String name, String value, int maxAge) {
    	try {
//注意此处的 URLEncoder
			value=URLEncoder.encode(value,"UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
        Cookie cookie = new Cookie(name, value);
        cookie.setPath("/");
        if (maxAge>0) cookie.setMaxAge(maxAge);
        response.addCookie(cookie);
    }
    
    /**
     * 添加cookie
     * @param response
     * @param name cookie的名称
     * @param value cookie的值
     * @param maxAge cookie存放的时间(以秒为单位,假如存放三天,即3*24*60*60; 如果值为0,cookie将随浏览器关闭而清除)
     * @param domain cookie的域名
     * @param domain cookie的路径
     */
    public static void addCookie(HttpServletResponse response, String name, String value, int maxAge,String domain,String path) {
    	try {
			value=URLEncoder.encode(value,"UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}    	
        Cookie cookie = new Cookie(name, value);
        cookie.setDomain(domain);
        cookie.setPath(path);
        if (maxAge>0) cookie.setMaxAge(maxAge);
        response.addCookie(cookie);
    }    
    

    /**
     * 获取cookie的值
     * @param request
     * @param name cookie的名称
     * @return
     */
    public static String getCookieByName(HttpServletRequest request, String name) {
    	Map<String, Cookie> cookieMap = readCookieMap(request);
        if(cookieMap.containsKey(name)){
            Cookie cookie = (Cookie)cookieMap.get(name);
            String value = null;
        	try {
    			value=URLDecoder.decode(cookie.getValue(),"UTF-8");
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		}
            return value;
        }else{
            return null;
        }
    }

    protected static Map<String, Cookie> readCookieMap(HttpServletRequest request) {
        Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
        Cookie[] cookies = request.getCookies();
        if (null != cookies) {
            for (int i = 0; i < cookies.length; i++) {
                cookieMap.put(cookies[i].getName(), cookies[i]);
            }
        }
        return cookieMap;
    }
分享到:
评论
1 楼 宋建勇 2012-09-05  
URLEncoder
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    VB任意图像转换为Base64文本

    在VB(Visual Basic)编程环境中,将本地图片转换为Base64编码是一项常见的任务,尤其在处理网页或网络传输中的图像数据时。Base64是一种用于将二进制数据编码为ASCII字符串的方法,使得这些数据可以在电子邮件等...

    ocx 将base64转图片的整体解决方案包括源代码,说明文档,bat脚本

    在IT行业中,Base64是一种常见的数据编码方法,它将任意二进制数据转换成可打印的ASCII字符,便于在网络上传输。Base64编码通常用于在电子邮件、HTML或JavaScript中传输非ASCII字符,例如图片数据。而OCX(ActiveX ...

    Base64编解码Demo

    Base64是一种在互联网上广泛使用的编码方式,用于将二进制数据转化为可打印的ASCII字符,以便在电子邮件、文本文件等不支持二进制传输的环境中传递。在这个"Base64编解码Demo"中,我们将探讨如何将MAC地址和IP地址...

    FBIK CharacterControl 1.2.2

    "FBIK CharacterControl 1.2.2"是一款专门针对3D角色动画制作的专业软件工具。这个版本1.2.2代表了该软件的一个更新迭代,通常会包含性能提升、新功能添加或已知问题的修复。以下是关于FBIK(Full Body Inverse ...

    xml-rpc 1.5.1

    s mbstring extension is enabled... (The automatic base64 encoding was added in the prior release, 1.4.8, and caused problems for users who don&apos;t control the receiving end of the requests.) Bug 7837.

    js自定义map集合

    由于原本把需要的数据存放到cookie中,但是cookie不能的key不能自动转译中文,出现乱码,后台服务器报错:Control character in cookie value or attribute.所以改为自定义map集合

    java将图片转为base64返回给前端

    Java 图片转换为 Base64 返回给前端 Java 将图片转换为 Base64 返回给前端是指在 Java 服务器端将图片转换为 Base64 编码字符串,并将其返回给前端,以便在前端进行显示或处理。本文将详细介绍 Java 将图片转换为 ...

    ControlCAN C++动态库 64位_32位

    ControlCAN_x64.zip ControlCAN.h x64 ControlCAN.dll ControlCAN.lib ControlCAN_x32.zip ControlCAN.h x32 ControlCAN.dll ControlCAN.lib 接口函数库(二次开发库)使用说明书.pdf

    Hospital-Access-Control-System:base64_encode 和 base64_decode

    二进制到文本编码(base64_encode 和 base64_decode) 这是一个非常简单的项目,用于收集有关加密使用性能的更多信息。 如果数据库一直加密和解密。 我们可以在多大程度上妥协性能和其他问题。 目前,我没有使用...

    Sliding Mode Control in Electromechanical Systems

    从给定的文件信息来看,虽然标题和描述都是关于“滑模控制在机电系统中的应用”,但是提供的部分内容却转向了金融工程与智能计算方法的关系,包括人工智能、神经网络、进化算法等在金融决策中的应用。...

    Digital Control in Power Electronics

    ### 数字控制在电力电子中的应用 #### 一、引言与背景介绍 《数字控制在电力电子中的应用》一书由Simone Buso和Paolo Mattavelli编写,主要面向电气工程领域的学生以及设计工程师,旨在介绍数字控制技术在电力电子...

    InControl 1.8.3.rar

    InControl 是 Unity 上一款统一的跨平台输入管理器,可以标准化常见控制器的映射。支持多种手柄 Xbox 360 控制器 • Xbox One 控制器 • PS3 和 PS4 控制器 • PlayStation Vita PSM • Apple MFi 控制器(iOS 7+、...

    Microsoft script control 64位.rar

    C#或者VB.Net 如果要调用JS,必不可少要用到Microsoft script control组件, 用过的人都知道有多方便, 但是官方版本只支持32位系统的, 64位系统使用会报错System.Runtime.InteropServices.COMException:“检索 ...

    ControlCAN.dll(64位)

    配套https://blog.csdn.net/ChaoChao66666/article/details/127361519?spm=1001.2014.3001.5501这篇博客的文件

    Open Alliance 100BASE-T1 PHY Control Test Suite_v1.0-dec.pdf

    Open Alliance 100BASE-T1 PHY 控制测试套件 Open Alliance 100BASE-T1 PHY 控制测试套件是由 OPEN Alliance 开发的一套测试工具,旨在帮助实施者检测 100BASE-T1 设备的PHY 控制功能问题。该套件包含了一系列测试...

    Python处理JSON时的值报错及编码报错的两则解决实录

    1、ValueError: Invalid control character at: line 1 column 8363 (char 8362) 使用json.loads(json_data)时,出现: ValueError: Invalid control character at: line 1 column 8363 (char 8362) 出现错误的...

    64位 ControlCan.dll

    本资源位64位.dll文件,网上搜索了一圈,都是32位的,所以上传分享

Global site tag (gtag.js) - Google Analytics