Leo Wang's Notepad

Cookie 无法保存的另一个可能原因

在项目中需要往cookie中写数据,之前遇到的问题是如果写入的内容超出了单个cookie的大小限制(4096字节,4KB),则服务器端的response就会异常。

今天的问题则是,虽然已经把很长的内容分割成立个好几段,并分别写入了不同的cookie中,但服务器端同样不能正常响应。

查资料得知,不知浏览器对同一个站点的cookie的个数,单个cookie文件的大小有限制,服务器还对每一次请求的httpheader的大小有限制。

对tomcat服务器来说,需要修改server.xml中的响应配置,在形如

[sourcecode language=”xml”]
<Connector port=”8080″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ maxHttpHeaderSize=”40960″/>

[/sourcecode]

的部分进行相应配置,上面的maxHttpHeaderSize就规定了本服务器可以处理的HttpHeader的大小上限为40KB。

 …

Struts2无法写Cookie的原因分析

在struts2项目中,希望把用户的表单输入保存在本地,而不是保存在数据库上,于是想到了cookie。

在action中可以这样写:

[sourcecode language=”java”]

Cookie cookie=new Cookie("myCookie","cookieContent");

cookie.setMaxAge(3600*24);//过期时间为一天

ServletActionContext.getResponse.addCookie(cookie);

[/sourcecode]

但是始终不能保存到客户端的硬盘上,刚开始的时候以为cookie的读写操作只能写在jsp页面中,或者只能通过javascript来操作,

后来发现不是这么回事。

关键的原因在于cookie是有大小限制的,如果想写入的内容超过了4KB,写操作便不能完成。

Microsoft Internet Explorer 符合以下的 RFC 2109 推荐最小限制:

  • 至少 300 的 cookie
  • 至少每 cookie (如构成 cookie 非终端设置 Cookie 标头的语法描述中的字符的大小为单位) 的 4096 字节
  • 至少 20 cookie,每个唯一的主机或域名

Extjs 在IE8中 GridPanel日期显示异常的处理

Extjs3.4的GridPanel在IE8中会出现日期无法render的现象,要解决这个问题,需要在 store的reader的column相应的字段上加上如下代码