Cookie --> 客户端技术
Session--> 服务器技术
会话与状态管理
会话:指一个WEB客户端与WEB服务器之间连续发生的一系列请求和响应过程。
会话状态
1.有状态会话:
2.无状态会话:默认情况下,客户端与WEB服务器之间的访问是无状态的,也就是说,客户端访问了一次WEB服务器后端曾经访问过.,再去访问WEB服务器,WEB服务器不会知道这个客户.
WEB编程解决无状态会话的两种技术:
1.Cookie
Cookie是客户端技术,利用这个技术,服务器可以把与会话相关的数据以cookie的形式写给客户端,客户端再去问服务器中的其它WEB资源时,会带着这些cookie去.这些WEB资源就可以通过客户端带过来的数据,判断用户曾经干过什么事情.
2.Session
Seeion是服务器端技术,利用这个技术,服务器可以把与会话相关的数据写到一个代表会话的session对象中,客户端再去访问其它WEB资源时,这些WEB资源可以从session中取数据,以判断用户曾经干过什么事情.
Cookie API
javax.servlet.http.Cookie类用于创建一个Cookie,
response接口中定义了一个addCookie方法,它用于在其响应头中增加一个相应的的Set-Cookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段.同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie.
Cookie 类的方法:
setValue与getValue
setMaxAge与getMaxAge设置cookie的有效期
不设置有效期cookie是保存在内存中的
设置有效期cookie是保存在硬盘中的
setPath与getPath设置访问路径
SetDomain与getDomain
设置域(域名的域)
设置域后表明在访问特定网站时才会带着cookie
Cookie细节
1.一个Cookie能标识一种信息,它至少含一个标识该信息的名称(NAME)和设置值(VALUE).
2.一个WEB站点可以给一个WEB浏览器发关多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie.
3.浏览器一般只允许放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB.
4.当setMaxAge设置为0时则是令浏览器删除该cookie.
注意:删除cookie时,path必须一致,否则会删除.
Session
1.在WEB开发中,服务器可以为浏览器的每一个会话创建一个会话对象(session对象),在需要实现有状态的servlet程序中,可以把会自豪感数据写到这个对象中,以实现有状态的会话.
2.Session和Cookie的区别:
2.1.Cookie是某一个servlet把会话数据写会客户端,其它servlet通过客户端带过来的cookie获得数据.
2.2.Session技术是某一个servlet把数据写到一个session对象中,会话过程中的其它servlet通过共享的session对象获得数据.
3.Session对象由服务器创建,开发人员可以request对象的getSession方法得到session对象。
request.getSession();
不可以在IE8上试验
当关掉浏览器时浏览器的session会消失,但服务器端不会消息,但服务器端会在30分种后自动销毁session
共享session
转发和 重定向 都可以拿得到session
特例:当浏览器禁用session/cookie时
如果还要继续购买的方法
可以把session复制到URL地址上
解决方案:URL重写
1.response.encodeRedirectURL(java.lang.String url)
用于对sendRedirect方法后的url地址进行重写
2.response.encodeURL(java.lang.String url)
用于对表单action和超链接的url地址进行重写
防止客户的浏览器阻止了cookie和session 编程时 都要把URL重写
配置session超时时间
web.xml
<session-config>
<session-timeout>1(分钟)</session-timeout>
</session-config>
session失效
session-invalidate()手动销毁session。