﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-BlackAngel's Blog</title><link>http://www.cnitblog.com/blackangel/</link><description>JavaScript技术博</description><language>zh-cn</language><lastBuildDate>Wed, 06 May 2026 09:50:50 GMT</lastBuildDate><pubDate>Wed, 06 May 2026 09:50:50 GMT</pubDate><ttl>60</ttl><item><title>JSP Cookies 用法总结</title><link>http://www.cnitblog.com/blackangel/archive/2008/05/12/43619.html</link><dc:creator>刘灿</dc:creator><author>刘灿</author><pubDate>Mon, 12 May 2008 02:30:00 GMT</pubDate><guid>http://www.cnitblog.com/blackangel/archive/2008/05/12/43619.html</guid><wfw:comment>http://www.cnitblog.com/blackangel/comments/43619.html</wfw:comment><comments>http://www.cnitblog.com/blackangel/archive/2008/05/12/43619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/blackangel/comments/commentRss/43619.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/blackangel/services/trackbacks/43619.html</trackback:ping><description><![CDATA[<p>Cookie概念:<br>Cookie 的格式实际上是一段纯文本信息, 由服务器随着网页一起发送到客户端, 并保存在客户端硬盘中指定的目录的. 大家都传说Cookie会造成严重的安全威胁什么的, 其实不是这么回事情. 服务器读取Cookie的时候, 只能够读取到这个服务器相关的信息. 而且, 浏览器一般只允许存放300个Cookie, 每个站点最多存放20个, 而且, 每个Cookie的大小现在在4K, 根本不会占用多少空间. 并且, Cookie是有时效性质的. 例如, 设置了Cookie的存活时间为1分钟, 则一分钟后这个Cookie就会被浏览器删除</p>
<p>Cookie版本:<br>目前有两个版本:<br>版本0 : 由Netscape公司制定的，也被几乎所有的浏览器支持. Java中为了保持兼容性, 目前只支持到版本0, Cookie的内容中不能空格，方括号，圆括号，等于号（=），逗号，双引号，斜杠，问号，@符号，冒号，分号。<br>版本1 : 根据RFC 2109文档制定的. 放宽了很多限制. 上面所限制的字符都可以使用. 但为了保持兼容性, 应该尽量避免使用这些特殊字符.</p>
<p>JSP中对Cookie的操作: 类型 方法名 方法解释<br>String getComment() 返回cookie中注释,如果没有注释的话将返回空值.<br>String getDomain() 返回cookie中Cookie适用的域名. 使用getDomain() 方法可以指示浏览器把Cookie返回给同一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始<br>int getMaxAge() 返回Cookie过期之前的最大时间，以秒计算。<br>String getName() 返回Cookie的名字<br>String getPath() 返回Cookie适用的路径。如果不指定路径，Cookie将返回给当前页面所在目录及其子目录下 的所有页面。<br>boolean getSecure() 如果浏览器通过安全协议发送cookies将返回true值，如果浏览器使用标准协议则返回false值。<br>String getValue() 返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。<br>int getVersion() 返回Cookie所遵从的协议版本。<br>void setComment(String purpose) 设置cookie中注释<br>void setDomain(String pattern) 设置cookie中Cookie适用的域名<br>void setMaxAge(int expiry) 以秒计算，设置Cookie过期时间。<br>void setPath(String uri) 指定Cookie适用的路径。<br>void setSecure(boolean flag) 指出浏览器使用的安全协议，例如HTTPS或SSL。<br>void setValue(String newValue) cookie创建后设置一个新的值。<br>void setVersion(int v) 设置Cookie所遵从的协议版本</p>
<p>一个简单的例子<br>1. 写入Cookie --- writecookie.jsp<br>-------------------------------------------------------------<br>&lt;%@ page contentType="text/html; charset=ISO8859_1" %&gt;<br>&lt;%<br>Cookie _cookie=new Cookie("user_delfancom", "delfan");<br>_cookie.setMaxAge(30*60); // 设置Cookie的存活时间为30分钟<br>response.addCookie(_cookie); // 写入客户端硬盘<br>out.print("写Cookie完成");<br>%&gt;</p>
<p>2. 读取Cookie.jsp --- readcookie.jsp<br>-------------------------------------------------------------<br>&lt;%<br>Cookie cookies[]=request.getCookies(); // 将适用目录下所有Cookie读入并存入cookies数组中<br>Cookie sCookie=null;<br>String sname=null;<br>String name=null;<br>if(cookies==null) // 如果没有任何cookie<br>out.print("none any cookie");<br>else<br>{<br>out.print(cookies.length + "&lt;br&gt;");<br>for(int i=0;i&lt;cookies.length; i++) // 循环列出所有可用的Cookie<br>{<br>sCookie=cookies;<br>sname=sCookie.getName();<br>name = sCookie.getValue();<br>out.println(sname + "-&gt;" + name + "&lt;br&gt;");<br>}<br>}<br>%&gt;</p>
<p>需要注意的两个问题:<br>1. Cookie有个适用路径的问题, 就是说如果 writecookie.jsp和readcookie.jsp要放在同意目录下, 如果不在同一目录下, 则写的时候需要设置路径,为readcookie.jsp所在的路径.<br>2. 读入Cookie数组的时候需要判断是否为空(null), 网上很多代码都没有写出这一点.</p>
<p>&nbsp;</p>
<p>=======================================================================</p>
<p>正常的cookie只能在一个应用中共享，即一个cookie只能由创建它的应用获得。<br>1.在同一应用服务器内共享的方法：设置cookie.setPath("/");<br>设本机tomcat/webapp下面有两个应用：cas和webapp_b</p>
<p>1）原来在cas下面设置的cookie，在webapp_b下面获取不到，<br>path默认是产生cookie的应用的路径。</p>
<p>2）若在cas下面设置cookie的时候，增加一条：<br>cookie.setPath("/");或者cookie.setPath("/webapp_b/");<br>就可以在webapp_b下面获取到cas设置的cookie了。</p>
<p>3）此处的参数，是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp)，因此cookie.setPath ("/");之后，可以在webapp文件夹下的所有应用共享cookie，而cookie.setPath("/webapp_b/")，是指cas应用设置的cookie只能在webapp_b应用下的获得，即便是产生这个cookie的cas应用也不可以。<br>4）设置cookie.setPath("/webapp_b/jsp/")的时候，只有在webapp_b/jsp下面可以获得cookie，在webapp_b下面但是在jsp文件夹外的都不能获得cookie。</p>
<p>5）设置cookie.setPath("/webapp_b/")，是指在webapp_b下面才可以使用cookie，这样就不可以在产生cookie的应用cas下面获取cookie了。</p>
<p>6）有多条cookie.setPath("XXX");语句的时候，起作用的以最后一条为准。</p>
<p>2.跨域共享cookie的方法：设置cookie.setDomain(".jszx.com");<br>A机所在的域：home.langchao.com,A有应用cas<br>B机所在的域：jszx.com，B有应用webapp_b</p>
<p>1）在cas下面设置cookie的时候，增加cookie.setDomain(".jszx.com");，这样在webapp_b下面就可以取到cookie。</p>
<p>2）这个参数必须以&#8220;.&#8221;开始。</p>
<p>3）输入url访问webapp_b的时候，必须输入域名才能解析。比如说在A机器输入：<a href="http://lc-bsp.jszx.com:8080/webapp_b">http://lc-bsp.jszx.com:8080/webapp_b</a>,可以获取cas在客户端设置的cookie，而B机器访问本机的应用，输入：<a href="http://localhost:8080/webapp_b">http://localhost:8080/webapp_b</a>则不可以获得cookie。</p>
<p>4）设置了cookie.setDomain(".jszx.com");，还可以在默认的home.langchao.com下面共享。</p>
<p><br>================================================================================</p>
<p>Response.Cookies("user_name").Expires=Date+1 '指定cookie保存时间</p>
<p><br>保留COOKIES一个小时<br>Response.Cookies("MyCookie").Expires= (now()+1/24)</p>
<p>Response.Cookies("MyCookie").Expires = DateAdd("h", 1, Now())</p>
<p><br>Response.Cookies("CookieName").Expires=DateAdd("m",60,now())<br>设置60个月以后过期</p>
<p>Response.Cookies("User").expires=second()+7<br>在expires后面定义的时间可以用时间函数代替<br>例如：date()+7就表示在今天的时间上加上7天，而second()+7则是7秒了。</p>
<p>Response.Cookies("字段名").expires=时间函数+N，例如：<br>Response.Cookies("name2").expires=date+1，表示Cookies保存1天，再比如：<br>Response.Cookies("name2").expires=Hour+8，表示Cookies保存8小时。<br>这种方法我测试过不行（在2003server,iis6.0中)，不管second后面有无加()，访问时会出现500错误（还是无法显示网页？忘了）。</p>
<p><br>织梦尤文：这里的时间累加建议还是使用DateAdd函数，比如我们要累加一小时，则使用：<br>Response.Cookies("baidooglecom").expires = DateAdd("h", 1, Now())</p>
<p>30分钟：<br>Response.Cookies("CookieName").Expires=DateAdd("n",30,now())</p>
<p>dateadd("S",30,now()) 得到秒</p>
<p><br>Expires 指定 cookie 的过期日期。为了在会话结束后将 cookie 存储在客户端磁盘上，或在许多时候，我们希望能更长时间地在访问者的计算机上保存cookie。必须设置该日期。<br>若此项属性的设置未超过当前日期，则在任务结束后 cookie 将到期。<br>cookie的使用到期时间为&#8220;2010年1月1日&#8221;： Response.Cookies("CookieName").Expires=#January 01, 2010#<br>cookie的过期时间为&#8220;cookie的创建时间＋365天&#8221;：Response.Cookies("CookieName").Expires=Date+365<br>但最好不要随便写 Response.Cookies("CookieName").Expires=Date，这样页面之间的调用时值会为空。<br></p>
<img src ="http://www.cnitblog.com/blackangel/aggbug/43619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/blackangel/" target="_blank">刘灿</a> 2008-05-12 10:30 <a href="http://www.cnitblog.com/blackangel/archive/2008/05/12/43619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>