cookie和session区别

什么是Cookie

其实简单的说就是当用户经过http协议访问一个服务器的时候,这个服务器会将一些Name/Value键值对返回给客户端浏览器,并将这些数据加上一些限制条件(中间件)。在条件符合时,这个用户下次再访问服务器的时候,数据又被完整的带给服务器。web

由于http是一种无状态协议,用户首次访问web站点的时候,服务器对用户一无所知。而Cookie就像是服务器给每一个来访问的用户贴的标签,而这些标签就是对来访问的客户端的独有的身份的一个标识,这里就如同每一个人的身份证同样,带着你的我的信息。而当一个客户端第一次链接过来的时候,服务端就会给他打一个标签,这里就如同给你发了一个身份证,当你下载带着这个身份证来的时候,服务器就知道你是谁了。因此Cookie是存在客户端的,这里其实就是在你的浏览器中。浏览器

Cookie中包含了一个由名字=值(name = value)这样的信息构成的任意列表,经过Set-Cookie或Set-Cookie2 HTTP响应(扩展)首部将其贴到客户端身上。以下图例子所示:安全

其实这里有一个很是典型的应用,就是关于你登陆不少网站的帐号信息,你让记住密码以后,一段时间内,不须要输入密码,每次都是登陆状态服务器

Cookie的分类

这里Cookie主要分为两种:
会话Cookie:不设置过时时间,保存在浏览器的内存中,关闭浏览器,Cookie便被销毁
普通Cookie:设置了过时时间,保存在硬盘上cookie

Cookie属性

由于最开始的cookie是网景公司定义的,后来又有了RFC版本因此当前的Cookie有两个版本:Version 0 Version 1 他们有两种设置响应头的标识,分别是:Set-Cookie和Set-Cookie2,这也形成了一些属性的不一样,这里须要注意:经常使用的为Version 0session

Version 0的属性性能

NAME = Value :键值对设置要保存的Name/Value,这里的name不能喝其余属性的名字同样
Expires:过时时间
Domain:生成该Cookie的域名
Path: 该Cookie是在当前的哪一个路径下生成
Secure:若是设置了这个属性,那么只会在SSH链接时才会回传该Cookie网站

Version 1的属性spa

Name=VALUE:键值对设置要保存的Name/Value,这里的name不能喝其余属性的名字同样
Comment:主是想,用于说明该Cookie有什么用途
CommentURL:该服务器为此COokie提供URI注释
Discard:是否在回话结束丢弃该Cookie,默认为false
Domain:生成该Cookie的域名
Max-Age:最大失效时间,与Version 0不一样的是这里设置的是在多少秒后失效
Path:该Cookie是在当前的哪一个路径下生成
Port:该 Cookie 在什么端口下能够回传服务端,若是有多个端口,以逗号隔开
Secure:若是设置了这个属性,那么只会在SSH链接时才会回传该Cookie中间件

关于Session

上面咱们知道了Cookie可让服务器端跟踪每一个客户端的访问,可是每次客户端的访问都必须传回这些 Cookie,若是 Cookie 不少,这无形地增长了客户端与服务端的数据传输量,而 Session 的出现正是为了解决这个问题。

同一个客户端每次和服务端交互时,不须要每次都传回全部的Cookie值,而是只要传回一个ID这个ID是客户端第一次访问服务器的时候生成的,并且每一个客户端是惟一的。这样每一个客户端就有了一个惟一的ID,客户端只要传回这个ID就好了,这个ID一般是NANE为JSESIONID的一个Cookie。因此Session实际上是利用Cookie进行信息处理的。

    1. cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。
    2. cookie 和session的区别是:cookie数据保存在客户端,session数据保存在服务器端。
    3. cookie不是很安全,别人能够分析存放在本地的COOKIE并进行COOKIE欺骗,若是主要考虑到安全应当使用session,固然也没有绝对的安全,只是相对cookie,session更加安全
    4. session会在必定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,若是主要考虑到减轻服务器性能方面,应当使用COOKIE
    5. cookie和session各有优缺点,因此将登录信息等重要信息存放为SESSION;其余信息若是须要保留,能够放在COOKIE中
相关文章
相关标签/搜索