• Cookie不能携带中文的解决方法


    在做一个十天免登陆功能的时候,需要用到Cookie,并且需要往里面添加用户名以及密码。在测试的时候,报了一个错误:

    出错的代码为:

     

    从报错信息来看,是说我的Cookie的值中有非法的参数或者Cookie值中携带有非法的控制字符,例如换行符:” ”、” ”

    这个cookie1里存的是:username:会飞的猪。也就是往cookie里添加了中文,我去网上搜了一下,果然cookie是不能直接携带中文的,这是不支持的

    但是如果想携带中文,有没有办法?当然,只要将cookie中有中文的key或者value用UTF-8或者gbk进行编码(只要是支持中文的编码就行),早期版本的tomcat推荐使用的是编码是:BASE64,早前版本的tomcat如果出现:cookie有非法参数的错,报错如下:

     Control character in cookie value, consider BASE64 encoding your value,但是现在版本的tomcat好像都不推荐使用这个编码了,还是使用UTF-8吧。

    编码后将其存入cookie中,最后取出来的时候,再用相同的编码进行解码即可。

    编码:URLEncoder.encode("中文key或者中文value","UTF-8″);

    解码:URLDecoder.decode(cookies.getValue(),"UTF-8″);

    URLEncodeURLDecode在包java.net里面。

    我这里是用户名使用了中文,所以需要将用户名编码以及解码一下:

    编码:

    解码:

    这样就没有问题了。

    对了,关于cookie为什么叫cookie,而cookie翻译过来就是曲奇饼干。听说是因为,当初发明cookie的这间公司提供给员工的零食是曲奇饼干,而曲奇饼干有一种特殊的味道。吃多了的话,人的身上会带有这种气味。一到大街上,人们闻到这种味道就知道了这个人是那间公司的员工。其实cookie也可以算是一个人身份的证明吧,不知道这个段子是不是真的,反正也侧面表现了cookie的作用。

  • 相关阅读:
    IIS配置
    sql表值函数中实现类似split功能
    毕至居预约系统设计图第十二组
    毕至居预约系统研发需求分析——第十二组
    MASA Blazor多页签组件
    关于Linux Oracle下的表空间文件删除不干净的处理方法
    命令行下对apk签名
    android自定义绘制TableLayout,类似.net中DataGrid控件
    使用Arcgis tools fix后Android不能生成Apk包异常解决方法
    SyncML一种平台无关的信息同步标准协议
  • 原文地址:https://www.cnblogs.com/ljfsmile0613/p/13401980.html
Copyright © 2020-2023  润新知