跳至主要內容

cookie与session的对比

Mr.Liu大约 4 分钟Introducecookiesessionauth

Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。要跟踪该会话,必须引入一种状态保持机制。

状态保持

  • 修改Http协议,使得它支持状态保持(难做到)

  • Cookies:通过客户端来保持状态信息

    • Cookie是服务器发给客户端的特殊信息
    • Cookie是以文本的方式保存在客户端,每次请求时都带上它
  • Session:通过服务器端来保持状态信息

    • Session是服务器和客户端之间的一系列的交互动作

    • 服务器为每个客户端开辟内存空间,从而保持状态信息

    • 由于需要客户端也要持有一个标识(id),因此,也要求服务器端和客户端传输该标识,

    • 标识(id)可以借助Cookie机制或者其他的途径来保存

COOKIE机制

Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理

Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookiekey/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等。服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。

Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息,如密码。

Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带GoogleCookie,而不会携带BaiduCookieGoogle也只能操作GoogleCookie,而不能操作Baidu的Cookie

基本特点

  • Cookie以键值对Key-Value形势进行信息的存储,只能保存字符串对象,不能保存对象类型

  • Cookie基于域名安全,不同域名的Cookie是不能互相访问的

  • Cookie保存在客户端,需要客户端浏览器的支持,缺点:浏览器用户可能会禁用Cookie

SESSION机制

如果说 Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

每次客户端发送请求,服务端都检查是否含有sessionId

如果有,则根据sessionId检索出session并处理;如果没有,则创建一个session,并绑定一个不重复的sessionId

基本特点

  • 状态信息保存在服务器端。这意味着安全性更高,可以存储敏感、重要的信息,支持更多字节,缺点Session共享问题

  • 通过类似与Hashtable的数据结构来保存,能支持任何类型的对象(session中可含有多个对象)

  • 保存会话id的技术,依赖于 Cookie。默认情况下在客户端与服务器端之间通过cookie方式传递 SeesionId

总结

两种状态跟踪机制的比较

CookieSession
存储位置保持在客户端保存在服务器端
存储类型只能保持字符串对象支持各种类型对象
实现机制通过过期时间值区分Cookie的类型需要SeesionId来维护与客户端的通信
会话Cookie——负数表示关闭浏览器销毁CookieCookie(默认)
普通Cookie——正数是设置的销毁时间,单位是秒表单隐藏字段
不支持Cookie——0表示立即销毁Cookie*url*重写