提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
会话机制
cookie 客户端解决方案
session服务器端解决方案
概念:
会话:1)一次会话中包含多次请求和响应
2)一次会话中,浏览器第一次给服务器发送请求,会话建立,直到有一方断开为止
会话跟踪: 在一次会话中,让服务器识别多次的请求来自于同一浏览器客户端
实现方式:
客户端会话技术 : Cookie
服务端会话技术: Session
在一次会话的范围内多次请间,共享数据
功能:
一、Cookie
客户端会话跟踪技术,将数据保存在客户端 Cookie对象
1、使用步骤
创建Cookie对象,绑定数据
Cookie cookie=new Cookie(String name,String value);
发送cookie对象
Response.addCookie( Cookie cookie)
获取Cookie ,拿到数据,识别身份
Cookie[] request.getCookies(); -> 在众多cookie中找到本站点发cookie
2、实现原理
基于响应头(set-cookie) 设置(cookie )和请求头(cookie) 实现
3、面试题
1. 一次可不可以发送多个cookie
a. 可以
b. 可以创建多个cookie对象,只需要在response调用多次addCookie方法
2. cookie在浏览器中保存多长时间!
a. 默认情况下,浏览器关闭,cookie中数据销毁
b. 持久化存储 i. setMaxAge(int seconds) ->cookie存活时间
3. cookie可不可以存中文
a. 在tomcat8之前不允许,但在tomcat8之后 可以
b. 需要中文来进行转码 --> URL 编码 解码
c. 不建议写中文 Cookie 小文本
4. Cookie作用和特点(背)
a. cookie存储在客户端浏览器
b. 浏览器对单个cookie的大小是有限制的(4KB ),对同一域名服务器来最多可以(20个)
c. cookie中一般用于存储少量不敏感的数据
d. 有cookie,下次可以不登录情况下,完成服务器端对客户端身份的识别(免登录 )
4、代码
设置cookie的存活时间:
//设置一个cookie
Cookie cookie=new Cookie("name","yq78");
//设置cookie存活过期的时间(60*60=1小时)
//60*60*24=1天
//60*60*24*30=1个月
cookie.setMaxAge(60*60*24*30);
response.addCookie(cookie);
cookie识别信息
Cookie[] cookies=request.getCookies();
for(Cookie cookie:cookies){
String name= cookie.getName();
String value= cookie.getValue();
if(name.equals("name")&&value.equals("yq78")){
System.out.println("已找到此网站发送cookie的值");
}
}
二、Session (主菜)
服务端会话技术,在一次会话中多次请求间共享数据,将数据保存在服务端对象中。 ServletAPI -》HTTPSession
1、 原理 :
session的实现是依赖于cookie的
2、特点:
1)Session可以存储一次会话中多次请求数据,存储服务器内存
2) session可以存储任意类型数据(Object) ,任意大小的数据
3、共享对象
获取HttpSession对象
HttpSession session=request.getSession();
使用HttpSession对象:
void setAtrribute(String name,Object value)
Object getAttribute(String name)
void removeAttribute(String name)
4、面试题:
客户端关闭后,结束会话,服务器不关闭,两次获得session是否为同一个?
不是
客户端不关闭,服务器关闭,两次获得session是否为同一个?
不是
session什么时候被销毁
客户端关闭
服务器端关闭
主动销毁 :session.invalidate()
超时,默认情况下30分钟失效
Session和cookie的区别
1. session存储数据在服务器端,Cookie在客户端
2. session没有数据大小的限制 ,Cookie有 4kb
3. session数据安全,cookie相对于不安全
Session和Requet和ServletContext对象区别(域对象),请你列举出javaWeb域对象
Request 代表一次请求(响应)
Session 代表一次会话 (多次请求和应答)
ServletContext代表一次应用 (多次会话)
ServletContext共享范围大于Session共享范围要大于Request共享范围
(request<Session<ServletContext)
5、代码
//获取session对象
HttpSession session = request.getSession();
System.out.println("JSESSIONID" + session.getId());
//session 对象唯一,Id唯一
//确定用户唯一性
session.setAttribute("name", "helloSessiona");
response.sendRedirect(request.getContextPath()+"/Session1Servlet");