-
从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次
会话
。 -
存储无状态的客户端信息
- Cookie技术:将客户端信息存储在客户端本地
- Session技术:将客户端信息存储在服务器
Cookie
服务器端向客户端发送一个Cookie
- 创建一个Cookie:
Cookie cookie = new Cookie(String cookieName,String cookieValue);
- 发送Cookie:
reponse.addCookie(cookie);
- 服务器发来的response带有
Set-Cookie:CookieName=CookieValue
字段
- 设置Cookie在客户端的持久化时间,如果不设置,则一次会话后,Cookie消失。设置时间为0,删除客户端同名Cookie。
cookie.setMaxAge(int seconds);//秒
- 设置Cookie设置携带的路径,如果不设置携带路径,那么该Cookie信息会在产生该Cookie的路径下出现。
cookie.setPath("");
获取客户端发来的Cookie
-
客户端发来的request带有
Cookie:CookieName=CookieValue;
-
获得Cookie
//获得所有Cookie
Cookie[] cookies = request.getCookies();
if (cookies != null){
for(Cookie cookie:cookies){
//获得cookie的名称
String cookieName = cookie.getName();
//获得cookie的值
String cookieValue = cookie.getValue();
System.out.println(cookieName + "=" + cookieValue);
}
}
Session
Session技术基于Cookie技术,Cookie存储Session编号–JESSIONID
- 获得Session对象,创建属于该客户端特有的session
/**
*如果该客户端在此服务器不存在session,那么就会创建一个新的session对象
*如果该客户端在此服务器存在session,就将已经存在的session返回
*/
HttpSession session = request.getSession();
String id = session.getId();//该session对象的编号id
- 向Session中存取数据
//存储数据
session.setAttribute(String sessionName,String sessionValue);
//获得数据
String sessionValue = (String) session.getAttribite(String sessionName);
- Session对象的生命周期
- 创建:第一次request.getSession()时创建
- 销毁:
- 服务器(非正常)关闭
- session过期/失效(默认30分钟),从不操作服务器端开始计时
- 手动销毁session
session.invalidate();
- 持久化JSESSIONID
HttpSession session = request.getSession();
String id = session.getId();//该session对象的编号id
Cookie cookie = new Cookie("JSESSIONID",id);
cookie.setMaxAge(60*20);
reponse.addCookie(cookie);