在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个通信会话。Web
应用中的会话过程类似于生活中的打电话过程,它指的是一个客户端(浏览器)与 Web 服务器
之间连续发生的一系列请求和响应过程,关闭浏览器会话结束,例如,一个用户在某网站上的整个
购物过程就是一个会话。
会话过程中会产生数据,数据存储到客户端使用客户端会话对象(cookie),数据存储到服务器端
使用服务器端会话对象(session);特点:服务器端为每个客户端创建会话对象存储数据,只供
这个客户端访问服务器的时候使用。
会话技术主要有客户端 cookie 与服务器端 session 两种
浏览器端的会话技术,它通过在浏览器中记录一些服务器传递过来的数据(cookie 存储在浏览
器),通过设置 cookie 的有效期决定浏览器存储数据的时间长短。
Cookie 就是浏览器写在客户端本地计算机上的键值对缓存数据,每个键对应的 value 值大小不超过 4kb
1. Cookie:
Cookie(String name, String value) 创建 cookie 对象
String getName() 获取 cookie 的名称
String getValue() 获取 cookie 的值
void setPath(String uri) 设置 cookie 的路径——浏览器根据这个路径判断那些 cookie 要发
送给服务器
2. HttpServletResponse:
void addCookie(Cookie cookie) 将 cookie 发送给浏览器
3. HttpServletRequest: Cookie[] getCookies() 获取浏览器发送的 cookie
要删除已经存在的 cookie,只需要创建一个一模一样的 cookie 覆盖已有 cookie,新创建的
cookie 必须名称和路径与原来的 cookie 一致,value 清空和有效期设置为 0
//创建 cookie 对象存储数据
Cookie cookie = new Cookie("name","");//设置 cookie 数据立刻过期
cookie.setMaxAge(0);//设置只允许以“GetCookieDataServlet”资源开头的 servlet 读取 cookie 数据
cookie.setPath("/GetCookieDataServlet");//将 cookie 数据输出到浏览器
response.addCookie(cookie);
session 是服务器端会话对象,是服务器为每个浏览器(每个用户)创建的单独私有存储空间.
服务器会为每个客户端在服务器内存里创建单独的存储空间
Session 技术的特点:
运行在服务器端,由服务器为每个浏览器创建单独的存储空间对象,称为服务器会话对象。
每个用户都有自己的会话对象,不同的浏览器代表不同的用户。
会话对象也是一个域对象,主要用于在服务器端存储每个用户存储自己的数据,不同的用户之间数据不能共享。
服务器端存储的用户私有数据都可以使用 session 存储
session 是域对象(会话域对象)
域对象可以存储数据,session 是会话域对象,一次会话过程内有效.从客户端浏览器第一次访问服务器开始,到浏览器关闭,期间可以进行一系列的请求与响应,这个过程称作为一次会话过程.
HttpServletRequest
HttpSession getSession() 获取 session 对象
HttpSession
void setAttribute(String name, Object value) 在 session 中保存数据
Object getAttribute(String name) 从 session 中获取数据
void removeAttribute(String name) 从 session 中移除数据
session 的有效期是一次会话内,关闭了浏览器 session 就没用了,但是 session 对象依然存储在服务器内存中,
session 对象并没有销毁,session 默认有效期 30 分钟.距离最后一次请求超过 30 分钟,session 对象过期销毁。
方式一:在 web.xml 中配置 session 过期时间
1). 通过 web.xml 中的配置
<session-config>
<session-timeout>1session-timeout>
session-config>
2). session-timeout 的解释:
如果设置为 0 或负数,则会话不过期,但受限于服务器的内存空间。
注意:一般没有人会去更改 session 默认 30 分钟有效期
/* 要求:浏览器关闭之后依然可以访问关闭之前的 session 数据
* */
//输出 sessionidHttpSession session = request.getSession();String sessionId = session.getId();//服务器再创建 session 的时候会同时写入 cookie,创建一个一模一样的 cookie,设置 cookie 有效期建议 30 分钟
Cookie cookie = new Cookie("JSESSIONID",sessionId);
cookie.setMaxAge(60*30);//输出 cookie 到浏览器
response.addCookie(cookie);response.getWriter().write(sessionId);