Cookie & Session

Too young too simple.

 

由于HTTP协议是无状态的协议,每次请求都是一个独立过程,所以下一次请求无法得知上一次请求产生的一些数据因此产生了cookie,作用是在一次请求介绍后保存一些数据到客户端,客户端在下次请求时携带上这些数据来确定状态。

session & cookie的区别:

  1. session 存储在服务器端(如果使用的是node,则存储在node服务器端),cookie 存储在客户端(用户本地浏览器)
  2. session 默认被存在在服务器的一个文件里(不是内存)。也可以存储在文件、数据库或者内存中,比如Redis等中,建议不要存在mysql等数据库中,因为session读取写入很频繁,对数据库压力很大,建议存储在内存数据库中。
  3. session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)

因为session存储在服务器端,所以相对cookie就安全多了。在客户端的cookie里面存放一个ID,然后用这个ID去匹配服务器端的session的,所以客户端只知道这个ID,其他信息都是服务器才知道。

现在一些轻量级的web库,用的是加密的cookie,而不需要用session,这样的好处就是极大的减轻了服务器的工作强度。之前用session不用cookie就是考虑到cookie是存储在客户端,不安全。而现在使用加密的cookie,理论上是安全的。

 

安全性:

  session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出cookie,我们叫做session cookie,以区别persistent cookies,也就是我们通常所说的cookie,注意session cookie是存储于浏览器内存中的,并不是写到硬盘上的,这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但是当我们把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到 sessionid=KWJHUG6JJM65HS2K6之类的字符串。
  通过HTTP请求报文头的Cookie属性的jsessionid的值关联起来的!当然也可以通过重写URL的方式将会话ID附带在每个URL的后面。
  session cookie针对某一次会话而言,会话结束session cookie也就随着消失了,而persistent cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,自然不如 session cookie安全了。
  通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,这样我们信息共享的目的就达不到了,此时我们可以先把sessionid保存在persistent cookie中,然后在新窗口中读出来,就可以得到上一个窗口SessionID了,这样通过session cookie和persistent cookie的结合我们就实现了跨窗口的session tracking(会话跟踪)

 

获取

  session是由服务器创建的,开发人员可以在服务器上通过request对象的getsession方法得到session
 

常用使用场景:

  1. 一般情况,登录信息等重要信息存储在session中,其他信息存储在cookie中。(用户验证 一般会用session)

 

有效时长

session的有效时长

服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。具体根据服务器设置,一般在二三十分钟左右。

计算开始时间:从session不活动的时候开始计算,一旦session被访问,计时清0。所以:只要session一直活动,就总不会过期

服务器端设置session的过期时间。

cookie的有效时长

cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。

通过过期时间可以设置cookie的有效时长

若不设置过期时间: 表示这个cookie的生命周期为浏览器回话期间,关闭访问服务器的浏览器窗口,cookie就消失了。一般称为回话cookie,保存在内存中若设置了过期时间:则cookie会存储在硬盘上,直到超过有效时间。

cookie:如果用户禁用了浏览器的cookie或者不小心删除了cookie, 则会失效;

默认cookies失效时间是直到关闭浏览器,cookies失效,也可以指定cookies时间。

 

posted on 2017-11-10 16:37  bala001  阅读(180)  评论(0编辑  收藏  举报

导航