java中Cookie使用问题(message:invalid character [32] was present in the Cookie value)
1、 问题描述
Servlet中执行下面一段代码:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
System.out.println( new Date().toString());
Cookie cookie = new Cookie("lasttime", new Date().toString());
response.addCookie(cookie);
String s = "欢迎您首次访问该网站!~";
Cookie[] cookies = request.getCookies();
if (cookies != null)
for (Cookie cs : cookies) {
if (cs.getName().equals("lasttime")) {
s = "您上次登录的时间为:" + cs.getValue().replace("-", " ");
}
}
response.getWriter().print(s);
}
抛出如下异常:

2、 追根溯源
出现上述问题觉得很奇怪,因为程序编译通过,至少证明没有语法错误,根据编译器提示,定位问题到:
Cookie cookie = new Cookie("lasttime", new Date().toString());
response.addCookie(cookie);
查看JAVAEE-API,发现有如下

回过去看代码,发现
输入: System.out.println( new Date().toString());
输出: Fri Apr 20 21:56:39 CST 2018
很明显输出字符串中存在 空格 ,所以程序会报错,存在无效字符。
3、解决方案
解决问题的方法其实很简单,只要字符串中不存在空格即可成功,下面将给出几种具体的解决办法,程序修改如下:
法一
思路:用“-”代替“ ”,之后记得换回来即可,程序成功运行。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
System.out.println( new Date().toString());
Cookie cookie = new Cookie("lasttime", new Date().toString().replace(" ", "-"));
cookie.setMaxAge(60*60);
response.addCookie(cookie);
String s = "欢迎您首次访问该网站!~";
Cookie[] cookies = request.getCookies();
if (cookies != null)
for (Cookie cs : cookies) {
if (cs.getName().equals("lasttime")) {
s = "您上次登录的时间为:" + cs.getValue().replace("-", " ");
}
}
response.getWriter().print(s);
}
法二
思路:进行URL编码,然后把编码后的字符串放到Cookie中,之后进行URL解码即可。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
System.out.println( new Date().toString());
Cookie cookie = new Cookie("lasttime", URLEncoder.encode(new Date().toString(), "UTF-8"));
cookie.setMaxAge(*);
response.addCookie(cookie);
String s = "欢迎您首次访问该网站!~";
Cookie[] cookies = request.getCookies();
if (cookies != null)
for (Cookie cs : cookies) {
if (cs.getName().equals("lasttime")) {
s = "您上次登录的时间为:" + URLDecoder.decode(cs.getValue(), "UTF-8");
}
}
response.getWriter().print(s);
}
程序运行正常,符合预期值。
java中Cookie使用问题(message:invalid character [32] was present in the Cookie value)的更多相关文章
- 【Cookie】java.lang.IllegalArgumentException An invalid character [32] was present in the Cookie value
创建时间:6.30 java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie va ...
- cookie实例---显示上一次访问的时间与java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
创建Cookie,名为lasttime,值为当前时间,添加到response中: 在A.jsp中获取请求中名为lasttime的Cookie: 如果不存在输出“您是第一次访问本站”,如果存在输出“您上 ...
- 异常java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
通过HttpServletResponse的addCookie(Cookie cookie)向客户端写cookie信息,这里使用的tomcat版本是8.5.31,出现如下报错: java.lang.I ...
- An invalid character [32] was present in the Cookie value 错误
今天在做cookie部分的demo的时候出现了一个错误Servlet部分的代码如下 Date data=new Date(); SimpleDateFormat format=new SimpleDa ...
- An invalid character [32] was present in the Cookie value
系统安装Tomcat版本为:tomcat8,登录时报错"An invalid character [32] was present in the Cookie value" 处理方 ...
- java.lang.IllegalArgumentException: An invalid character [34] was present in the Cookie value
java.lang.IllegalArgumentException: An invalid character [34] was present in the Cookie value at org ...
- exception 'DOMException' with message 'Invalid Character Error' Php + Mongodb
问题描述: 项目属于MVC设计模式,技术和框架采用了php5.6 + Yii2.0 + MongoDB. 在我从Controller中调用Model 的 findAll([]) 方法获取数据打印到屏幕 ...
- Eclipse 中 Syntax error on token "Invalid Character", delete this token 的解决
eclipse中遇到了Syntax error on token "Invalid Character", delete this token(令牌“无效字符”上的语法错误,删除此 ...
- 理解Java中的字符串类型
1.Java内置对字符串的支持: 所谓的内置支持,即不用像C语言通过char指针实现字符串类型,并且Java的字符串编码是符合Unicode编码标准,这也意味着不用像C++那样通过使用string和w ...
随机推荐
- linux中man 2与man 3区别
1.Standard commands (标准命令)2.System calls (系统调用)3.Library functions (库函数)4.Special devices (设备说明)5.Fi ...
- bzoj 3170 Tjoi 2013 松鼠聚会 曼哈顿距离&&切比雪夫距离
因为曼哈顿距离很好求,所以要把每个点的坐标转换一下. 转自:http://blog.csdn.net/slongle_amazing/article/details/50911504 题解 两个点的切 ...
- HTTP状态码的含义: 200:400:403:404:408:500:503:504
http协议的状态码 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101( ...
- 【Asp.net入门4-03】条件断点
- django中的认证与登录
认证登录 django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1 authenticate(**credentials) 提供了用户认证,即验证用户名以及密码是否 ...
- Dockerfile基本语法
Dockerfile的组成 Dockerfile分为四部分: 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令 Dockerfile指令说明 FROM 格式为FROM <image&g ...
- 项目经验总结-twice
1.尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的.为类指定 ...
- [Java] 集合框架原理之二:锁、原子更新、线程池及并发集合
java.util.concurrent 包是在 Java5 时加入的,与 concurrent 的相关的有 JMM及 AbstractQueuedSynchronizer (AQS),两者是实现 c ...
- 两步建立 ssh 反向隧道
因为需要在寝室访问实验室的内部网络,刚好自己购买了阿里云,因此,可以远端干活了,mark下方法: 第一步:在内网的服务器上,使用ssh 命令建立反向隧道 publicUserName@publicIp ...
- VScode常见问题汇总(持续更新)
1.formatOnSave--保存后自动格式化 根据每个人安装的插件不同,可能问题原因也不同. 我个人的原因是因为JS-CSS-HTML Formatter这个插件,那么 ...