Session和Cookie

Session和Cookie

Session

HTTP是一个无状态的协议(是指协议对于事务处理没有记忆能力,服务器不知道客户端处于什么状态。及我们给服务器发送http请求,服务端根据请求会给我们发送数据过来。但是发送完成后不会记录任何信息),短连接。

在这里插入图片描述

一旦客户端和服务器的数据交换完毕,就会断开连接,再次请求,会重新连接,这就说明服务器单从网络连接上是没有办法知道用户身份的。怎么办呢?这时就与要引入Session(会话)。

那就给每次新的用户请求时,给它颁发一个身份证(独一无二)吧,下次访问,必须带上身份证,这样服务器就会知道是谁来访问了,针对不同用户,做出不同的响应。,这就是Cookie的原理

在这里插入图片描述

登录操作:

(1)生成一个随机的字符串Session_id,保存在Tomcat的用户信息数据结构中,一个Session_id绑定一个用户,一个用户保存多个信息

(2)把Session_id放在响应头,头信息的键值对,键是双方约定好的,值就是Session_id值

(3)客户端之后的请求都携带Session_id

(4)服务端接收请求,都验证Session_id(在map中通过通行证证号,查找用户,来判断是否登陆)

在这里插入图片描述

总结

(1)Session是干嘛的?

会话,用来保持用户身份信息

主要解决需要登录的敏感资源的访问信息

(2)如何实现的?

通过服务器来保存Session信息

(3)流程?

session是一种服务器端的信息管理机制,它把这些文件信息以文件的形式存放在服务器的硬盘空间上(这是默认情况,可以用memcache把这种数据放到内存上面)当客户端向服务器发出请求时,要求服务器产生一个session时,服务器会检查一下客户端的cookie里面有没有sessionid以及它是否过期,如果有sessionid,服务器会根据cookie里的sessionid把服务器的session检索出来,如果没有这样的sessionid的话,服务器会重新建立一个(随机生成),同一客户端启动二次session的话,sessionid是不一样的

如何创建一个Session

 //获取Session信息(从客户端获取jsessionid,在服务端map找到session对象),
// 参数为false,如果获取不到,返回null
//参数为true,如果获取不到,创建一个(服务端创建,再返回)
HttpSession session = req.getSession(false);
if(session==null){
    resp.setStatus(401);//没有登陆访问敏感资源
}

Cookie

背景

使用场景:免登录,个性化设置

在这里插入图片描述

实现

将用户信息保存在客户端本地(和浏览器相关的本地路径下,保存用户信息到本地文件),跟域名进行绑定用户信息的Cookie,之后访问某个域名时,浏览器自动从本地抓取该域名的cookie信息

在这里插入图片描述

Session和Cookie的区别

(1)保存位置不同:Cookie是保存在客户端,Session是保存在服务端。

(2)安全性:因为Cookie是保存在客户端的,比较容易遭到不法获取,早期有人将用户的登录名和密码存储在 Cookie 中导致信息被窃取;而Session是保存在服务端的,相比较于Cookie更安全

(3)是否与要浏览器支持:Cookie是需要浏览器支持的,如果在设置关闭Cookie支持,则不能使用Cookie

(4)有效时间不一样:通常情况下Cookie可以长时间保存,而Session只可以进行一段时间保存(一般30分钟)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值