保持各个客户端自己的数据。
由于Cookie数据是由客户端来保存和携带的,所以称之为客户端技术。
getMaxAge() : 返回以秒为单位指定的cookie的最大生成时间。默认情况下,-1指示该cookie将保留到浏览器关闭为止。
setMaxAge() : 设置cookie的最大生存时间。
正值表示cookie将在经过该值表示的秒数之后过期。该值表示cookie过期的最大生存时间,不是cookie当前的生存时间。
负值意味着cookie不会被持久存储,将在web浏览器退出时删除。0值会导致删除cookie。
创建cookie
删除cookie
注意:要设置被删除cookie的path,只根据名字可能会删错对象
Session与cookie的区别:
Session 的id 存在cookie中,根据id读取session,没有则创建
> 它也是一个域对象: session servletContext request
> 同一个会话下,可以使一个应用的多个资源共享数据
一个窗口打开多个链接可以共享
***> cookie客户端技术,只能存字符串。HttpSession服务器端的技术,它可以存对象。
Sessiom依赖cookie
把数据保存在HttpSession对象中,该对象也是一个域对象。
void setAttribute(String name,Object value);
Object getAttribute(String name);
void removeAttribute(String name);
HttpSession.getId():
setMaxInactiveInterval(int interval) 设置session的存活时间,以秒为单位
实际开发中保存用户登陆信息就是存到session中,如果没有session则说明用户没有登陆。
达到设置的有效时间过期后,会提示重新登陆,此时session销毁。
HttpSession request.getSession():内部执行原理
1、获取名称为JSESSIONID的cookie的值。
2、没有这样的cookie,创建一个新的HttpSession对象,分配一个唯一的SessionID,并且向客户端写了一个名字为JSESSIONID=sessionID的cookie
3、有这样的Cookie,获取cookie的值(即HttpSession对象的值),从服务器的内存中根据ID找那个HttpSession对象:
找到了:取出继续为你服务。
找不到:从2开始。
HttpSession request.getSession(boolean create):
参数:
true:和getSession()功能一样。
false:根据客户端JSESSIONID的cookie的值,找对应的HttpSession对象,找不到返回null(不会创建新的,只是查询)。
session状态:
注释:
serializable可序列化,如写的book类:class book implements serializable,服务器重启时可以保存session数据。
可序列化称为活化;不可序列化成为钝化。
Session依赖cookie,
客户端禁用cookie:浏览器永远不会向服务器发送cookie的请求消息头
解决方案:
方案一:在主页上给出提示:请不要禁用您的cookie
方案二:URL重写。必须对网站的所有地址都重写。
http://url -重写为--> http://url;JSESSIONID=111
语法:
response.encodeURL(String url);
看浏览器有没有发送cookie请求消息头,没有就重写URL,有就不重写。
request.getSession();必须写