JSP中使用Cookie的总结

今天在使用Cookie时发现,无论怎样添加Cookie,在引用Cookie的时候只得到名称为JSESSIONID,值为一个无序字符串的Cookie,且从客户端获得的Cookie数组长度为1,说明手工添加的Cookie并没有成功保存到客户端。反复尝试了N次,在网上查看了很多这方面的帖子,都没有找到答案。最后终于发现,如果将创建Cookie的语句放在<jsp:include page="includes\head.jsp" flush="true" />(代码的头部有这条语句)的下面,Cookie将添加失败,反之则添加成功。而我们得到的名称为JSESSIONID实际上服务器端保存在客户端的SESSION(会话),它的值就是服务器随机分配的唯一的SESSION-ID,用以保持http连接的有效性。SESSION实际上是以Cookie的形式保存在客户端的,SESSION和Cookie的不同之处在于,SESSION保存在浏览器所用的内存空间中,而Cookie保存在客户端的硬盘上。页面的关闭不会释放SESSION,只有当客户端的浏览器关闭时,SESSION才会被释放。对于Cookie,它的声明周期取决与服务器端对Cookie.setMaxAge()的这一设置,否则将一直保存在硬盘上,直至超出有效期或被人工清除。

另外如果客户端禁用了Cookie,SESSION将随之失效,只能使用URL重用,通过在客户端的请求链接字符串后面加入SESSION-ID才能保持http的有效。

1、Cookie的创建
      调用Cookie对象的构造函数可以创建Cookie。Cookie对象的构造函数有两个字符串参数:Cookie名字和Cookie值。名字和值都不能包含空白字符以及下列字符:
   [ ] ( ) = , " / ? @ : ; 

例如

String cookie_name;

String cookie_value;

.....(初始化cookie_name,cookie_value)

Cookie cookie=new Cookie(cookie_name,cookie_value);

cookie.setMaxAge(*) (设置Cookie的有效时间,以秒作为单位)

response.addCookie(cookie) (添加Cookie到客户端)

2、使用Cookie

Cookie[] userCookie=request.getCookies();

for(int index=0;index<userCookies.length;index++)

{

out.print("Cookie_Name="+userCookie[index].getName()+""+"Cookie_Value="+userCookie[index].getValue())

}

 

你可能感兴趣的:(jsp,String,session,浏览器,服务器,include)