简单的理解:用户打开浏览器,点击多个超链接,访问Web服务器上多个资源,然后关闭浏览器,整个过程称之为一次会话。
需要解决的问题每个用户在使用浏览器与服务器会话的过程中,会产生一些用户数据,如用户登陆标记,WEB应用程序必须要为每个用户在一次或多次会话过程中保存这些数据。
两种技术HttpSession简称Session,是服务器端技术,服务器在运行时为每个用户的浏览器创建一个其独享的HttpSession对象。由于用户各自独享session,所以可以把各自的数据存放在各自的session域中,当用户去访问当前web应用其他web资源时,其他web资源再从用户各自的session中取出数据为其服务。
Cookie类1、javax.servlet.http.Cookie
Cookie的属性:
name:必须的,Cookie名
有一个cookie它的路径是:/app/servlet/当浏览器访问的新资源的路径是:/app/1.jsp问?浏览器会将该cookie带给1.jsp吗?不会
当浏览器访问的新资源的路径是:/app/servlet/a/b/ServletDemo1问?浏览器会将该cookie带给ServletDemo1吗?会总结:在访问一个资源时,带不带已有的cookie。访问的资源路径.startsWith(cookie的path),如果为true,则会带
如果把一个Cookie的path设置成了/app/
,说明访问/app/
下面的任何资源,都会带cookie过去。
domain:默认就是产生Cookie的Servlet所在的网站域名
加入cookie的domain是www.baidu.com访问http://www.163.com带不带?不带
maxAge:标识cookie的生命周期。默认是一次会话
要想在客户端的缓存中保存住Cookie的数据,增大它的存活时间。单位是秒如果取值为0,就是要删除之。
2、服务器向客户端写Cookieresponse.addCookie(Cookie cookie);对应设置响应头的“Set-Cookie”
3、获取客户端提交过来的CookieCookie[] cookies = request.getCookies();接着遍历cookies数组确定所需的Cookie
4、如何唯一确定一个Cookie(有同名Cookie情况)通过domain+path+name,可以确定唯一一个Cookie
5、其他
javax.servlet.http.HttpSession
HttpSession技术实际上还是利用Cookie技术
HttpSession session = request.getSession();
每一个HttpSession对象都有一个唯一的ID为了标识每一个客户端,实际上向客户端写了一个特殊的Cookie:
request.getSession()方法详解:
request.getSession(boolean b):如果b为true,作用等同于request.getSession()。 如果b为false,作用只是获取。找不到则返回null。
session.invalidate():立刻摧毁服务器中的HttpSession对象。
2、HttpSession本身是一个域对象void setAttribute(String name,Object obj) 设置属性void removeAttribute(String name) 移除属性Object getAttribute(String name) 获取属性
3、HttpSession生命周期3.1 客户端向服务器第一次发送请求的时候,request中并无sessionID.3.2 此时server端会创建一个session对象,并分配一个sessionID,serssion对象会保存在服务器端。此时session的状态处于new state状态,如果调用session.isNew(),则返回true3.3 当服务器段处理完毕后,将此sessionID,以Cookie的形式传到客户段。3.4 当客户段再次发送请求时,会将sessionID 同request参数一起发送,传递给服务器端。3.5 服务器端可以根据传递过来的sessionID将这次请求(request)与保存在服务器端的session对象联系起来,此时的session已不处于new state状态,如果调用session.isNew(),则返回false.3.6 循环3-5 ,直到session超时或被销毁。
4、HttpSession对象的状态转换HttpSession对象默认超时为30分钟。4.1 更改HttpSession的默认超时时间:在web.xml中配置
123 |
|
4.2 HttpSession对象状态
新闻热点
疑难解答