一 : 会话技术
从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话,会话技术就是记录这次会话中客户端的状态与数据的.会话技术是帮助服务器记住客户端状态的.
二 : Cookie
Cookie
是将用户的数据存储到客户端的技术.
- 服务器端将Cookie发送到客户端 :
cookie.setPath(" ")
如果不设置携带路径,那么该cookie信息会在访问产生该cookie的web资源所在的路径都携带cookie信息
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建COOKIE对象
Cookie cookie = new Cookie("name", "jingjing");
//为cookie设置持久化时间,cookie信息在硬盘上存的时间
cookie.setMaxAge(60*10);
//为cookie设置携带的路径
// cookie.setPath("/WEBpro/sendcook");//访问sendcookie资源时携带这个cookie
//访问WEBpro下任何资源的时候都携带这个cookie
cookie.setPath("/WEBpro");
//访问服务器下的所有资源都携带这个cookie
// cookie.setPath("/");
//将cookie中有存储的信息发送到客户端
response.addCookie(cookie);
}
- 服务器端接受客户端携带的Cookie :
显示最后一次访问时间demo
//获得当前时间
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");
String time = format.format(date);
//创建cookie记录当前最新访问时间
Cookie cookie = new Cookie("accessTime", time);
cookie.setMaxAge(60*10);
response.addCookie(cookie);
//获得客户携带的cookie
String lastTime = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cook : cookies) {
if (cook.getName().equals("accessTime")) {
lastTime = cook.getValue();
}
}
}
//设置显示中文
response.setContentType("text/html;charset=UTF-8");
if (lastTime == null) {
response.getWriter().write("您是第一次访问,祝愉快");
}else {
response.getWriter().write("上次的访问时间是 : " + lastTime);
}
}
- 删除客户端的cookie
删除客户端存储的cookie信息,使用同名同路径的持久化时间为0的cookie进行覆盖.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//删除客户端name:"..."的cookie信息
Cookie cooie = new Cookie("name", "");
//将path设置与要删除的cookie path一致
cooie.setPath("/WEBpro");
//设置时间是0
cooie.setMaxAge(0);
response.addCookie(cooie);
}
三 : Session技术
Session
技术是将数据存储在服务器端的技术,会为每一个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间. Session的实现是基于Cookie,Session需要借助Cookie存储客户端唯一标识JESSIONID
-
获取Session对象
//创建属于该客户端(会话)私有的session区域
/*
* 内部判断该客户端是否在服务器已经存在session,如果客户端在服务器不存在session,那么创建一个
* 新的session对象
* 如果该客户端在服务器已经存在session,获得已经存在的session返回.
* */
HttpSession session = request.getSession();
String id = session.getId();
当浏览器关闭,Session
并没有销毁,而是Cookie中保存的JESSIONID
没有了,没有了这把钥匙,就无法在服务器中寻找对应的Session
空间
-
手动创建一个JSESSIONID的cookie,为该cookie设置持久时间
HttpSession session = request.getSession();
String id = session.getId();
//回写前手动创建一个JSESSIONID的cookie,为该cookie设置持久时间
Cookie cookie = new Cookie("JSESSIONID", id);
cookie.setPath("/WEBpro/");
cookie.setMaxAge(10*60);
response.addCookie(cookie);
session.setAttribute("name", "hello");
response.getWriter().write(id);
-
Session域对象
Session 是一个域对象
有如下方法
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
//从session中获得存储数据
HttpSession session = request.getSession();
String name = (String)session.getAttribute("name");
response.getWriter().write(name);
四 : Session对象的生命周期
创建 :
第一次request.getSession()
销毁 :
① : 服务器关闭时(非正常)
② : session过期/失效(默认30分钟)
可以在web.xml中配置
超时时间是从不操作服务器端的资源开始计时.
<session-config>
<session-timeout>30</session-timeout>
</session-config>
③ : 手动销毁session
session.invalidate();
五 : session原理
每一个客户端(用户)对应服务器端一块内存区域.通过客户端存的编号(JSESSIONID)找寻相应的内存空间,如果找不到则创建新的.Cookie
属于会话级别的,当一次会话结束时,cookie
即可消失,所以想要保存cookie
就要设置cookie
的存活时间,而Session
在服务器中存储,客户端关闭,并不会让Session
消失.依然保存在服务端.

网友评论