1:什么是Cookie
Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。具体查看浏览器的Cookies可以参考:
http://blog.unvs.cn/archives/explorer-cookies-ie-chrome-firefox.html或
http://jingyan.baidu.com/article/335530da8c240719cb41c33b.html?st=2&os=0&bd_page_type=1&net_type=2;
比如我们访问了某个网站之后,下次访问登录时,登录界面的用户名已经填写。相类似功能的都可用Cookies技术实现.
2:怎么创建Cookies
第一种方法:在服务器端创建Cookies。以Java为例。通过javax.servlet.http.Cookie类可以创建一个Cookie。
它的构造方法为:Cookie(java.lang.String name,java.lang.String value)但是在创建Cookie时需要注意name 参数
不能为逗号、分号、空格符,且不能以美元符($)开头。且Cookie的name 属性一旦定义就不可以改变。原始API为下文:
The name must conform to RFC 2109. That means it can contain only ASCII alphanumeric characters and cannot contain commas, semicolons, or white space or begin with a $ character. The cookie's name cannot be changed after creation.
服务器端将Cookie发往客户端的代码如下:HttpServletResponse.addCookie(javax.servlet.http.Cookie)
服务器端从客户端请求获取Cookie的代码如下: HttpServletRequest.getCookies()
第二种方法:在浏览器端通过JS实现。代码如下
function setCookie(c_name,value,expiredays) { var exdate=new Date() exdate.setDate(exdate.getDate()+expiredays) document.cookie=c_name+ "=" +escape(value)+ ((expiredays==null) ? "" : ";expires="+exdate.toGMTString()) }其中第三个参数expiredays表示创建的该Cookie多久后失效。比如setCookie("testKey","testValue",new Date().getSeconds+5)。
表示该Cookie在5秒后就失效。
3:Cookie的其它可选属性。
Cookie(java.lang.String name,java.lang.String value)。通过该构造方法创建的Cookie只有name 和value 属性。
但我们还可以通过其它方法来给Cookie添加属性。就像在第二种使用JS创建Cookie的方法中我们还给Cookie提供了
过期时间。
实际上Cookie还有一些其它的可选属性。但官方API提出由于某些浏览器在处理这些可选属性的时候还存在bug,所
以我们应该谨慎的使用这些属性。
那么下面我们就来看看有哪些属性。
get/setComment(java.lang.String comment):给该Cookie添加注解,一般最多也就开发人员调试用的比较多。
其它的不经常用到该属性。
get/setMaxAge(int expiry):该Cookie在expiry秒后失效,以秒为单位。
get/setPath(java.lang.String url):当浏览器再次发起对该URL的请求时,自动将该Cookie加到请求中,
即将该Cookie发送给服务器。举个例子:比如在第一次访问A网站登录页面时,服务器创建了Cookie,
且将该Cookie的path属性设置为登录页面的URL。那么之后当用户再次访问A网站登录页面时浏览器自动就将该
Cookie放在请求中,发送给服务器。而在访问其它页面时不会发送该Cookie。通过这个机制,我们可以设计一
个专门记录用户登录信息的Cookie。这样每当访问登录页面时服务器读取该Cookie,将解析出来的用户名信息
放入返回给浏览器登录页面的用户名输入栏。这样就用户就不用每次登录A网站时都需要重新输入用户名了。
get/setDomain(java.lang.String pattern):和set/getPath(**)方法相似,表示在设置域名下的所有应用共享该Cookie。
可理解成将Cookie的作用于扩大了。
get/setSecure(boolean flag):如果设置成True:表示该Cookie只能通过安全协议传输。比如https、 ssl
get/setValue(String value):表示拿到或重新设置该Cookie 的value值
getName(): 就如前面所说,Cookie一经创建,他的name 就不可再改变,所以也没有对应的setName(newName)方法。
4:Cookie的修改与删除
我们可以通过setValue(String name)方法来修改某个Cookie的值,但我们该怎么删除某个Cookie呢?通过设置它的过期日期。
在服务器端我们通过setMaxAge(0)方法是该Cookie立即失效(参数为0)。在浏览器端删除某个Cookie的方法在之前用JS创建
Cookie的例子中已经写过,就不在重复代码了。只需将过期日期+5去掉就行了。