目录
一、生活例子
session与cookie是一种会话技术,session会话,cookie小饼干。常用在用户登录,身份识别,数据传输等。我们去超市购物,出示会员卡才能够获取优惠,那怎么能证明我们这个会员卡是有效的,收银员输入卡号到系统中,系统根据这个卡号去查找,查询到了就证明了这个会员卡有效。这个会员卡就相当于cookie,是放在我们手里的,我们是客户。会员卡号相当于sessionid是存储在cookie中。
我们想注册会员,所以我们去超市让工作人员给我们办了一个会员卡,这个会员不仅我们要知道我是会员还要让这个超市知道我是会员,所以工作人员在超市会员系统中登记了我们的信息,相当于session,然后给我们一个会员卡相当于cookie,告诉我们下次来购物带着这张卡就行了,但是怎么能证明我们这个会员卡是有效的,会员卡有一个卡号,在创建会员的时候就存到了会员卡中,就是sessionid。
二、为什么需要cookie与session?
http传输协议是无状态的,浏览器发出一个请求,服务器接受到请求,然后响应给浏览器,这时浏览器与服务器建立了一个连接,等到浏览器收到就断开连接了。但是等下次我们在去发送请求又重新建立一个连接,比如我们登录淘宝,我们下单或者提交购物车时又得重新登录,然后可能登录完购物车的东西也没了,然后又下单重新登录,如此繁琐压根不能满足我们的需求。http协议无状态就是无记忆,就是我们需要前面的东西还得重传,为了弥补这种不足,产生两个记录http状态的技术,一个叫cookie,一个叫session。
三、Cookie
小饼干,保存在浏览器,是客户端技术,怎么发到客户端呢?通过响应。客户端怎么发给服务端呢,只能通过请求。一个Cookie只能保存一个信息,因为我们new Cookie( String ,String)
一个web站点可以给浏览器发送多个cookie,每个站点最多存放20
cookie大小有限制4kb
浏览器上限300个
删除cookie
不设置有效期,关闭浏览器,会话失效
设置有效期时间为0
运行原理
客户端向服务端发送一个http请求
服务端发给客户端一个cookie
Cookie cookie = new Cookie("lasttime", System.currentTimeMillis()+"");
resp.addCookie(cookie);
下一次请求时带着这个cookie
//Cookie 服务端从客户端获取,从req获取 Cookie[] cookies = req.getCookies(); //返回数组,说明cookie可能存在多个
四、Session
一次会话,打开和关闭浏览器的一次过程,服务端技术,一个session独占一个浏览器.
常见场景:
网站你登陆,第二次不用再登录。
用户登录之后,整个网站都可以访问,不用每个页面都得登录。-->保存用户的信息,保存购物车的信息
整个网站中经常会使用的数据保存在session中。
SessionId是放在cookie里面的,
session不仅能存字符串,还能存对象等更强大的东西
之前我们说共享数据可以用ServletContext现在我们可以用Session 实现不同的Servlet共享数据
运行原理:
1.客户端向服务端发送http请求
2.服务端根据设置的session创建指令,在服务端创建一个编号为sessionid的文件,里面的值就是session具体的值(组成部分 变量名 | 类型 :长度:值).
HttpSession session = req.getSession();
3.服务端将创建好的sessionid编号响应给客户端,客户则将该编号存在cookie中
4.当下一次请求时,客户端将这个sessionid携带在请求中,发送给服务端,服务端根据这个sessionid来做一些业务判断.
五、Session和Cookie的区别
Cookie是把用户的数据写给浏览器,浏览器保存(可以保存多个)
Session把用户的数据写到用户独占的session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
Session对象由服务器创建,一打开浏览器就自动创建了1一个Session对象,Cookie是由服务器生成,发送给浏览器,浏览器以k-v形式保存,下次请求同一网站带着cookie发给服务器。
ServletContext后面叫Application比如统计在线人数,多个用户共享的东西。