用户信息

HTTP是一个无状态协议,就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。这种无状态的好处就是快速,坏处就是需要进行永华状态保持的场景时(比如,登录状态下进行页面跳转,或者用户信息多页面1共享等场景),必须使用一些方法或者手段比如:session和cookie

再通过一个例子来理解session和cookie的由来

我们抓取一个访问受限的网页,如新浪微博好友的主页,个人微博页面等;

显然,通过浏览器,我们可以手动输入用户名和密码来访问页面,所谓的“抓取”,其实就是使用程序来模拟完成同样的工作,因此我们需要了解“登陆”过程中到底发生了什么。

当用户来到微博登陆页面,输入用户名和密码之后点击“登录”后浏览器将认证信息POST给远端的服务器,服务器执行验证逻辑,如果验证通过,则浏览器会跳转到登录用户的微博首页,在登录成功后,服务器如何验证我们对其他受限制页面的访问呢?因为HTTP协议是无状态的,所以很显然服务器不可能知道我们已经在上一次的HTTP请求中通过了验证。当然,最简单的解决方案就是所有的请求里面都带上用户名和密码,这样虽然可行,但大大加重了服务器的负担(对于每个request都需要到数据库验证),也大大降低了用户体验(每个页面都需要重新输入用户名密码,每个页面都带有登录表单)。既然直接在请求中带上用户名与密码不可行,那么就只有在服务器或客户端保存一些类似的可以代表身份的信息了,所以就有了cookie与session。

Cookie

HTTP是一个无状态的协议,但是访问有些资源的时候往往需要经过认证的账户才能访问,而且要一直保持在线状态,cookie就是一种在浏览器端解决的方案,保存在客户端的信息,将登陆认证之后的用户信息保存在本地浏览器中,后面再次发起HTTP请求,都自动携带上该信息,就能达到认证用户,保持用户在线的作用,如下图:

【网络】HTTP中的Cookie和Session的简单介绍

 

Cookie使用场景/作用:前端页面,在登陆页面中,获取用户身份信息,并通过代码填充到用户名,密码栏

cookie是由时间限制的,根据生命周期不同分为两种:会话cookie和持久cookie

如果不设置过期时间,则表示这个cookie生命周期为从创建到浏览器关闭止,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。

如果设置了过期时间(setMaxAge(606024)),浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。  

session

将用户敏感信息放到本地浏览器中,能解决一定的问题,但是又引进了新的安全问题,一旦cookie丢失,用户信息泄露,也很容易造成跨站攻击,所以有了另一种解决方法,将用户敏感信息保存至服务器,而服务器本身采用md5算法或相关算法生成唯一值(session id),将该值保存在客户端浏览器,随后,客户端的后续请求,浏览器都自动携带该id,进而再在服务器端认证,进而达到状态保持的效果,一般我们将session id 保存在cookie文件中

使用场景/作用是需要用户登录才能访问的一些敏感的url,会根据session进行用户身份校验。

Session可以依赖cookie实现,也可以不依赖cookie实现(通常是采用URL重新的策略实现)。

 

【网络】HTTP中的Cookie和Session的简单介绍Cookie和Session的相同点

Cookie和Session都是维持客户上下文信息的一种策略;

 

Cookie和Session的不同点

  1. Cookie以文本文件格式储存在浏览器中,是客户端维护客户上下文信息的策略,而Session存储在服务器端,通过在服务器端维护客户上下文信息的策略;
  2. 因为每次发起HTTP请求,都要携带有效Cookie信息,所以Cookie一般都有大小限制,以防止增加网络压力,一般不超过4k;
  3. 可以轻松访问Cookie值但是我们无法轻松访问会话值,因此Session方案更安全;
  4. Sookie策略依赖于客户浏览器对Cookie的支持,而Session可以不依赖客户端浏览器的对Cookie的支持实现;

 

参考:https://blog.csdn.net/u010325193/article/details/80670349

相关文章: