有20多天不能上网了,憋屈极了,赶紧发表一下自己对Cookie的理解。
关于cookie的名字,无须废言。
Cookie到底是什么?
--cookie是document的一个属性,也就是说每个page对应一个cookie对象,所以
--cookie是一个有生命周期的对象,默认为一个会话期同session一样,但是可以设定到指定的日期。
--cookie还是一组属性。它最多可包含name、expires(GMT格式)、path、domain、secure,以半角的分号隔开。
Domain:域属性表明cookie由哪个网站产生或者读取。(如:www.domain.com)
Path: 通过设置网站上精确的路径,就能限制cookie的使用范围。如:"/maindir/subdir/path"
<script language="javascript">
function getCookie_value(cookie_name){
cookie_name += "=";
var cookieStr = document.cookie;
var returnValue = "";
if (cookieStr.length > 0){
var index = cookieStr.indexOf(cookie_name);
if (index != -1){
index += cookie_name.length;
returnValue = unescape(cookieStr.substring(index, cookieStr.indexOf(";",index)));
}
}
return returnValue;
}
function setCookie(){
var cookieStr = arguments[0]+"=";
cookieStr += (arguments[1]?arguments[1]:"")+";"
int argc = arguments.length;
if (argc >= 3){
var expDate = new Date();
expDate.setTime(expDate.getTime()+24*3600*parseFloat(arguments[2])); //days
cookieStr += "expires="+expDate.toGMTString();
}else if (argc >= 4){
cookieStr += ";path="+arguments[3];
}else if (argc >= 5){
cookieStr += ";domain="+arguments[4];
}else{
cookieStr += ";secure";
}
document.cookie = cookieStr;
}
function clear_Cookie(){
document.cookie = "";
}
</script>
J2EE1.4对Cookie的支持
Java对Cookie的定义跟JS不一样。Java里的Cookie是指“由Servlet发送给浏览器的并能回送到服务端的一组信息,一个Cookie的值可以惟一地标识一个客户端”,很显然,这里的Cookie并不与一个document相连,而是指在服务器和浏览器之间建立一个请求--回应的通话过程中的传送的一组简单数据,注意,这里是一组,而非一个。个数可以由HttpServletResponse.addCookie(Cookie)任意添加,而HttpServletRequest.getCookies() 一次性可以取出N个Cookie对象。
使用response增加cookie数据后,出现一些意想不到的现象:
1. 多了个JSESSIONID
2. new Cookie(name,value)中value不能有分号!
3. 在同一request中的多个Java Cookie,放在JS的document.cookie中是一个以分号隔开的“name=value”字符。
Cookie应用场景
JavaScript变量与Java变量交互。通常情况下,JavaScript可以方便的使用Java的输出变量,但反过来使用却并不容易。Cookie便提供了这样一种渠道。但目前为止,Java和JavaScript之间的Cookie通信只限于name和value,Cookie其他的属性如:expires,path,domain等均无效。