Cookie与Session

 再说Cookie与Session以前,先要了解一下http协议。web

  • 何为http协议:

http协议即超文本传输协议,一种基于浏览器请求与服务器响应的协议,该协议主要的特色就是它是一种无状态的协议(只针对cookie与session问题),在客户端连续向服务器发送请求的时候,每次请求的过程当中只要数据交换完毕,服务器与客户端就会断开链接,再次请求的时候会从新链接客户端与服务器,这样服务器记录上次的对话,那么问题来了,如何让服务器知道是哪一个客户端向本身发出的请求呢,这个时候cookie就诞生了~编程

  • 何为cookie:

cookie是一小段文本信息,这段小文本信息由服务器首次响应客户端时发送的,在客户端向服务器首次发送请求的时候,服务器会判断是否要记录客户端的身份,若是须要,此时就会在响应中(response)给客户端发送一个cookie,该cookie文本信息保存在http的报头里,当浏览器会将cookie保存起来,当该浏览器再次发送请求时会携带cookie,服务器检查cookie来识别浏览器请求。跨域

cookie有一些特色:浏览器

  1. cookie是能够被浏览器禁止的,并且不一样的浏览器对cookie的保存方式也不同;
  2. cookie对象是以键值对的形式纯在的;
  3. cookie是不能够跨域的;同一个浏览器访问一次百度(百度给浏览器颁发一个cookie),访问一次腾讯(腾讯给浏览器颁发一个cookie),因为cookie是浏览器管理的,因此浏览器会根据域名来判断是否能够操做cookie。总而言之,百度的请求时不可能携带腾讯颁发的cookie,反之依然成立。
  4. cookie是有生命周期的;
  5. cookie是不安全的;这么说并不许确,只是针对某些状况来讲是不安全的。因为http协议自己不具备安全性,在传输协议的过程当中是能够被截获的,因此cookie通常只会在https等安全协议中传输。
  • 何为session:

session本省并不存在,只是一个概念,session是服务器用来记录客户端状态的机制,不一样于cookie保存在浏览器中,session是保存在服务器上的,服务器会根据cookie生成一个session id存在服务器上,当请求再次抵达服务器时,服务器发出响应时会将session id 存在cookie内一同反回给浏览器,这就是session。session以键值对的形式保存。安全

session的一些特色:服务器

  1. session的机制决定了当前用户只能获取到本身的session,各个session是独立的,不可见的;
  2. session是有生命周期的,Session保存在服务器端。Session保存在服务器端。为了得到更高的存取速度,服务器通常把Session放在内存里。每一个用户都会有一个独立的Session。若是Session内容过于复杂,当大量客户访问服务器时可能会致使内存溢出。所以,Session里的信息应该尽可能精简。Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session,用户每访问一次服务器,服务器就会认为该用户session活跃了一次。
  3. session的有效期;为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。若是超过了超时时间没访问过服务器,Session就自动失效了。
  4. session对浏览器的需求,session是存在服务器中的,可是对客户端是透明的,session的运行是须要客户端浏览器的支持,session须要使用cookie做为标识。http协议自己是无状态的协议,session不能根据每一次的请求判断客户端,session须要使用cookie做为标识,因此服务器向客户端浏览器发送一个Jsessionid的Cookie,它的值为session id,session会根据cookie的值即session id来判断是否为同一个客户端。那么问题来了,若是cookie被浏览器禁止了,这样session机制就很差使了吗,不是这样的,获取session id的方式还能够经过Hidden Form跟URL,也就是对于一个已经启用了session机制的系统来讲,咱们惟一的目的就是让http这个无状态的协议编程模拟成有状态(websocket长链接就不说了),只要能每一次的请求让服务器获取到session id就达到目的了。

     终结:cookie与session是有区别的,由于cookie是保存在客户端浏览器中的,而session是保存在服务器中的,可是在session机制以cookie做为标识的场景下cookie与session又没有区别,由于不管使用cookie机制仍是session机制,本质上都是经过cookie机制来使服务器 来识别客户端浏览器的。websocket

 

                                                                                  dqhan cookie

                                                                                  2017.1.3session

相关文章
相关标签/搜索