周五项目测试完毕没问题之后上线,上线之后发现有的账户登录不上

原因为,用来记录追踪用户的cookie中包含cookie。读取,写入时候发生异常。

异常大概是这个样子:

java.lang.IllegalArgumentException: Control character in cookie value or attribute.
        at org.apache.tomcat.util.http.CookieSupport.isHttpSeparator(CookieSupport.java:193)
        at org.apache.tomcat.util.http.CookieSupport.isHttpToken(CookieSupport.java:217)
        at org.apache.tomcat.util.http.ServerCookie.appendCookieValue(ServerCookie.java:186)
        at org.apache.catalina.connector..Response.generateCookieString(Response.java:1032)
        at org.apache.catalina.connector..Response.addCookie(Response.java:974)
        at org.apache.catalina.connector..ResponseFacade.addCookie(ResponseFacade.java:381)
        at com.vcfilm.interceptor.service.AutologonService.setCookie(AutologonService.java:168)
        at com.vcfilm.interceptor.service.AutologonService.saveLogonInfo(AutologonService.java:129)
        at com.vcfilm.interceptor.service.AutologonService.saveLogonInfo(AutologonService.java:139)
        at com.vcfilm.wechat.actioncommon.BaseAction.SaveSession(BaseAction.java:45)
        at com.vcfilm.wechat.actioncommon.BaseAction.SetMember(BaseAction.java:191)
        at com.vcfilm.wechat.member.MemberAction.logincheck(MemberAction.java:364)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)

中文需要 URLEncoder.encode.  utf-8

可参这篇文章 http://blog.csdn.net/newyear1988/article/details/7817066

加了之后发现还是有问题,写cookie的时候用des加密了,发现取cookie,getVal()之后用解密的时候异常,于是在捕获异常代码块直接返回了getVal()得到的值。

  1. /**
  2. * 从cookie中取值
  3. * */
  4. public String getCookieVal(HttpServletRequest request, String key){
  5. Cookie[] cookies= request.getCookies();
  6. if(null != cookies && cookies.length > 0){
  7. for(Cookie c:cookies){
  8. if(c.getName().equalsIgnoreCase(key)){
  9. if(null != c){
  10. try{
  11. return URLDecoder.decode(c.getValue(), "utf-8");
  12. }catch(Exception e){
  13. e.printStackTrace();
  14. return c.getValue();
  15. }
  16. }
  17. }
  18. }
  19. }
  20. return "";
  21. }
  22.  
  23. /**
  24. * 保存值到cookie
  25. * */
  26. public void setCookie(String key, String val, int maxAge){
  27. try{
  28. val = URLEncoder.encode(val, "utf-8");
  29. }catch(Exception e){
  30. e.printStackTrace();
  31. }
  32. Cookie cookie = new Cookie(key, val);
  33. if(maxAge > 0){
  34. cookie.setMaxAge(maxAge);
  35. }
  36. cookie.setPath("/");
  37. ServletActionContext.getResponse().addCookie(cookie);
  38. }

cookie包含中文导致的问题的更多相关文章

  1. subprocess.Popen指令包含中文导致乱码问题解决

    其实解决起来非常简单,如果了解到Windows中文系统编码为GB2312的话 只需将你包含中文的指令字符串编码为GB2312即可 cmd = u'cd 我的文档' cmd.encode('gb2312 ...

  2. 图片url中包含中文导致网络请求404

    需要对其中的中文使用转换格式,注意不是整个url,如果是整个,"/"这个网络分隔符`也会被转换的 URLEncoder.encode("福利", "u ...

  3. Cocos2dx 代码中包含中文导致编译错误的问题解决方法

    从网上下载一个cocos2dx的源码,是IOS版本的,我将其迁移到windows 7下 ,用VS2010编译,出现一堆的C2001错误: 1>d:\cocos2d-x-2.2.6\mygame\ ...

  4. 生成二维码 加密解密类 TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型) COOKIE帮助类 数据类型转换 截取字符串 根据IP获取地点 生成随机字符 UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME 是否包含中文 生成秘钥方式之一 计算某一年 某一周 的起始时间和结束时间

    生成二维码 /// <summary>/// 生成二维码/// </summary>public static class QRcodeUtils{private static ...

  5. Control character in cookie value, consider BASE64 encoding your value , java操作cookie遇到中文会报错的解决方案

    项目当中用到cookie保存中文,但是会报如下错误: Control character in cookie value, consider BASE64 encoding your value 大概 ...

  6. ORA-00911: invalid character 包含中文报错

    SQL在pl下正常执行在vs里报错ORA-00911: invalid character. 1.检查SQL末尾是否含有";" 去掉 2.sql包含中文报错 string sql ...

  7. am start的总结,-d参数的总结,以及python中传递内容包含中文及特殊字符&的解决方案

    一.am start的内容的整理 主要包含以下内容:am start的常规操作及参数的含义,-d 参数的含义,以及如何在APK中设置参数获取 使用命令如下:adb shell am start -n ...

  8. ORACLE判别字段是否包含中文

    在ORACLE数据库中如何查找那些字段里面包含中文的数据记录呢,有时候就是有这样的特殊需求,下面整理了一些判别字段中包含中文记录的几个方法 1:使用ASCIISTR函数判别   ASCIISTR函数说 ...

  9. SQL判断某列中是否包含中文字符、英文字符、纯数字 (转)

    一.包含中文字符 select * from 表名 where 列名 like '%[吖-座]%' 二.包含英文字符 select * from 表名 where 列名 like '%[a-z]%' ...

随机推荐

  1. js 点赞数 处理

    likeNum(num) { if (num === 0) { num = ''; } else if (num > 9999 && num <= 9999999) { n ...

  2. JAVA线程池原理详解一

    线程池的优点 1.线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用. 2.可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃. 线 ...

  3. svg学习(六)line

    <line> 标签用来创建线条. <?xml version="1.0" standalone="no"?> <!DOCTYPE ...

  4. Debian系列Linux/Ubuntu 安装软件

    wps(http://community.wps.cn/download/) 优客天气(https://launchpad.net/indicator-china-weather/+download) ...

  5. 最长公共上升子序列(LCIS)

    最长公共上升子序列慕名而知是两个字符串a,b的最长公共递增序列,不一定非得是连续的.刚开始看到的时候想的是先用求最长公共子序列,然后再从其中找到最长递增子序列,可是仔细想一想觉得这样有点不妥,然后从网 ...

  6. paper 107:图像的白平衡

    所谓白平衡(White Balance):指在图像处理的过程中,对原本材质为白色的物体的图像进行色彩还原,去除外部光源色温的影响,使其在照片上也显示白色.也就是不管在任何光源下,都能将白色物体还原为白 ...

  7. MVC5关联表读取相关表数据

    SchoolName = db.Sys_Company.Find(gr.SchoolCode).FullName 只需Model中指定好SchoolCode是Sys_Company的主键就行了!

  8. jquery file upload 文件上传插件

    1. jquery file upload 下载 jquery file upload Demo 地址:https://blueimp.github.io/jQuery-File-Upload/ jq ...

  9. 用mysql++读写二进制

    方法1: // mysqlTest.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <mysql++.h> #inc ...

  10. 安装Ifconfig

    1.ifconfig 2.whereis 检查 3.yum search ifconfig 4.分割线下面让我们安装 net-tools.x86_64 执行 yum -y install net-to ...