ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

cookie和session基础原理介绍

2021-04-24 21:35:13  阅读:137  来源: 互联网

标签:销毁 浏览器 用户 session cookie 服务器 原理


前言

由于http协议是无状态协议,它并不储存关于客户的状态信息,就像服务器会完全忘记之前发生的事情一样。

然而在实际的使用中,当你登录某个购物网站时,你的购物车里的东西会一直保存下来,当你登录一些视频

网站时,它会根据你过去的喜好给你推送类似的视频。实现这些功能,就涉及到了cookie和session。

一,cookie

cookie是servlet规范下的一个类,用于储存与用户有关的信息,写入响应头中交还给浏览器

1.原理简介

比如你去理发店,由于是第一次去,所以你去开了个卡,上面记载了你的姓名信息和存放的金额,还有记录

你喜欢的发型等等,然后把会员卡交还给你。当你第二次去那家理发店时,只要将卡一刷,不管是不是之前

的理发师都了解了你喜欢的发型以提供针对的服务,以及结束时自动从卡里扣钱。

 

 

 

 在这里,客户就是浏览器,理发店就是某个服务器,cookie就是里面的会员卡。

当第一次登录后,服务器就会把用户信息存入cookie中发给浏览器,浏览器自动保存cookie,当下次访问同

一个服务器时,浏览器将无条件的将cookie写入到请求头发送过去,这样服务器就能获得客户的信息,提供

更好的服务。

2.销毁时机

默认情况下,cookie在浏览器关闭时就会被销毁,当然也可以通过cookie.setMaxAge()来设置

在硬盘上的存活时间,从而不会随浏览器关闭而销毁。很多网站的记住登录信息就是这样实现,而很长一段

时间过后再去访问就发现要重新登录,这就是cookie被销毁的缘故,在浏览器设置里清除所有的cookie也是

这样的效果。

3.好处及弊端

通过图解的方式可以看出,cookie可以传送给同一个服务器下的不同servlet对象,也就是说cookie可以作为

多个servlet之间数据共享的一个方式。然而,作为存放用户重要信息的一个方式,cookie能存放在用户的硬

盘上,也就是给人提供了修改的可能,比如账户余额这种重要数据,如果可以随意修改问题就很严重,同时

别有用心的人也可以通过抓包等方式获取用户访问服务器的cookie,来获取用户的敏感信息,以及代替用户

访问服务器(可以通过将cookie和用户ip与浏览器种类绑定来验证cookie的安全性,但是ip与浏览器同样可

以被伪造),相对而言,接下来的session就安全的多。

二,session

和cookie不同,session是servlet规范下定义的一个接口,有servlet-api.jar提供了实现类

1.原理简介

还是类比理发店,你第一次访问建立了一个新卡,但不同的是理发店只给了你一把钥匙,然后把你的新卡放入

了店里的一个保险柜中,只有你的钥匙可以打开。当你下次去理发时,你只要带上钥匙,理发师就能通过保险

柜中记录的信息来给你提供服务。

 

这里,session就是那个保险柜,用于存放用户信息,而那个钥匙就是sessionid,本质是一个cookie,但其中不

包含用户的任何信息,sessionid在用户访问服务器页面就会由服务器自动分配创建,而session来存放的用户信

息是存放在服务器的内存上的,在互联网传播过程中就降低了用户信息被获取的风险。

2.销毁时机

sessionid本质上是cookie,在没做规定下浏览器关闭则销毁,而session则是长时间没有调用由服务器自行销毁

一般tomcat默认时间为20分钟,或者是服务器关闭就销毁。注意,一旦中间对session有调用那么该session重新

计时。

3.好处及弊端

同cookie一样,session是一种多个servlet之间数据共享的方式,而且安全性上比cookie优良的多。个人感觉sessionid

貌似也不是很安全,中间人同样能获取sessionid来向服务器套取用户信息或者是恶意登录,现在还有一种禁用cookie

的方案来实现session,可以说是提高安全性的一个好方式。

篇幅有限,这里就只对cookie和session的实现原理简单介绍,以后会针对两者做详细解析。

 

 

标签:销毁,浏览器,用户,session,cookie,服务器,原理
来源: https://www.cnblogs.com/ssr1377/p/14698150.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有