Cookie 和 Session
1.Cookie:
1>完成会话跟踪的一种机制:采用的是在客户端保存http信息的一种方案
2>Cookie是浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一个小文本文件
3>一旦浏览器保存了Cookie,那么它在以后每次访问该WEB服务器时,都会在HTTP请求头中将这个Cooike传送给服务器
4>底层的原理:WEB服务器通过在HTTP响应消息增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过HTTP请求信息中增加Cookie请求头字段将Cookie回传给WEB服务器
2.Cookie相关的API
向客户端浏览器写入Cookie
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//1.创建一个Cookie对象 Cookie cookie = new Cookie("name","lijian"); //setMaxAge设置cookie的最大持久化时效,以秒为单位 0为立即删除 负数为不存储 正数为该cookie的存储时间 cookie.setMaxAge(30); //2.调用response 的方法把cookie传给客户端 response.addCookie(cookie);
默认情况
Cookie的作用范围可以当作当前目录 和 当前目录的子目录但不可以 作用于当前目录的上一级目录
//设置Cookie的作用范围
//cookie.setPath(request.getContextPath());
重浏览器读取Cookie
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//显示最近浏览的5本书 Cookie [] cookies = request.getCookies(); //获取Cookie //筛选出符合条件的 //显示cookieValue if(cookies != null && cookies.length > 0){ for(Cookie c: cookies){ String cookieName = c.getName(); if(cookieName.startsWith("ATGUIGU_BOOK_")){ out.println(c.getValue()); out.print("<br>"); } } }
3 会话cookie和持久化cookie:
1》 如果不设置过期时间,则表示cookie生命周期就是浏览器会话周期。只要关闭浏览器窗口,cookie就会消失。这种生命为浏览器会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里
2》如果是指过期时间,浏览器就会把cookie保存在硬盘上,关闭浏览器后再打开这些cookie依然有效直到超过设定的过期时间
4.两个应用:
1>自动登录:
2>显示浏览过的商品信息
2.Session
1.概念
1>HttpSession :在服务器端保持HTTP状态信息的方案 和 其对应的是COOKIE
2>产生Httpsession 过程:当程序为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里面是否包含一个session标识(sessionID),如果包含一个sessionId说明此前已经为此客户创建过session,
服务器按照sessionId把这个session检索出来使用(如果检索不到创建一个,可能服务端已经删除了,或者session已经过期)
如果请求不包含session,则为此客户创建一个session并且生成一个session相关的sessionId,这份sessionId会在本次访问中返回给客户端保存
3>使用Cookie来跟踪session:sessionId来区分不同的客户,session是以cookie或URL重写为基础,默认使用cookie来实现,系统会创建一个名为jsession的输出cookie,这称之为session cookie,session cookie是存储在浏览器上并不是写道硬盘上,通常看不到sessionID,
2.生命周期
1>创建一个session :
若第一次访问的JSP页面,且该页面page指定的session属性为false就不会创建session
server端调用HttpServletRequest.getSestion(true)或者HttpServletRequest.getSession()这样的语句才会被创建
若访问的JSP页面,page指定的session属性为true ,这服务器制动会给该页面分配一个 HttpSession对象
2>销毁一个
调用方法 HttpSeeeion.invalidate()
超过最大时效
服务器进程被停止(或当前WEB应用被卸载)
注意:关闭浏览器只会使在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效
3>API
获取session对象: request.getSession(); 或 request.getSession(boolean create)
属性相关的:setAttribute,getAttribute,removeAttribute
使Httpsession失效的incalidate()
设置最大时效的 getMaxInactiveInterval()
4>URL重写
是servlet规范引用的一种补充会话管理机制,它允许不支持Cookie的浏览器也可以与WEB服务器连续会话
将会话表示一参数的形式附加在超链接地址后面的技术成为URL重写
代码
<a href="<%=response.encodeURL("login.jsp") %>">重新登录</a>
<a href="<%=response.encodeURL("logout.jsp") %>">注销</a>
3.API
4.URL重写