cookie和session辨析

一、cookie是什么

cookie就是服务器发给客户端的信息,这些信息以文本文件的方式储存在诸如浏览器等的客户端里。然后,如果客户端再向相同域名的服务端发送请求的时候,就会带上这些信息。从服务端发送过来的cookie会出现在http的响应头中(response header),而当客户端再次向相同域名发送http请求的时候,cookie会出现在请求头中。

cookie经常用来存放用户的身份、密码等信息,最常见的cookie使用场景就是:在登陆界面,有一个“是否记住我”的选项,当勾选以后每户发送请求都会带上cookie来验证用户身份,这样用户就避免了重复输入用户名和密码了。

对于设置cookie,不同的语言有不同的方法,甚至还有一些专门的插件。当在一个域名下设置了cookie,之后针对这个域名和路径下所有的请求都会带上cookie。

关于cookie的过期时间:cookie的过期时间在与cookie的值一同设定的,它指定了cookie什么时候不再被发送至服务器,而后浏览器/服务端会删除该cookie。如果不设置的话,那么cookie只存在于当前会话当中,浏览器一旦关闭,该cookie就会被删除。P.S 但是chrome做了优化,在你关闭以后一点时间它依然不会失效。

关于cookie的域名和路径:域名(domain)选项决定了cookie被发送到哪个域名下,默认情况下是与创建cookie相同的域名;路径(path)的作用与域名选项相同,也是指定了特定的路径,才会在请求头中附加cookie信息。

登陆界面是否记住我的逻辑:当用户输入完用户名和密码以后,并且还勾选记住我的情况下,这些信息发送到服务端,在服务端完成用户验证以后,服务端会在setCookie里做一个不用重复输入密码的标记,然后发送给客户端,用户下次再登陆的时候,在这个域名和路径下,这些cookie会再次发送到服务端,服务端从cookie里读取了之前的标记,就不会让用户再次输入用户名和密码,而是直接跳转了。当然,这个cookie的标记是有时间限制的,一旦超过了,这个标记就会被浏览器删除。

总结:一般cookie交互过程如下:
1、客户端发送一个http请求给服务端
2、服务端发送一个http响应给客户端,在响应头中内嵌了cookie
3、在相同域名和相同路径下,客户端发送一个请求到服务端,在请求头中带上了cookie
4、服务端发回一个http响应给客户端

二、session是什么?

session的主要用处和cookie一样,都是用来记录用户的身份信息。不同的地方在于,cookie是储存在客户端,而session是储存在服务端。

因为cookie是储存在客户端,这就引发了一个安全问题:所有储存在客户端的东西都可以通过某种方式进行人为修改。而session则解决了这一问题,因为它储存在服务器上。

session的使用逻辑:服务器先给每一个发送过来http请求的浏览器一个id,当然,这个id是加密过的;这个id会储存在浏览器的cookie中,所以以后浏览器发送请求的时候都会带上这个cookie中的id。与此同时,服务器给每个用户给了一个session,当服务器验证通过了用户的身份信息,就会用session[id]在session中做一个标记,这样下次用户再在相同域名/路径请求时,服务器在读取到id并在session中找到了标记的话,用户就不用再次输入用户名和密码了。

三、Cookie and Session区别

1、cookie数据存放在客户的浏览器上,session数据放在服务器上;
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session;
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用cookie;
4、单个cookie在客户端的限制是4K,就是说一个站点在客户端存放的cookie不能超过4K

知乎上冯罗特的回答:

1,session 在服务器端,cookie 在客户端(浏览器)
2,session 默认被存在在服务器的一个文件里(不是内存)
3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
4,session 可以放在 文件、数据库、或内存中都可以。
5,用户验证这种场合一般会用 session 因此,维持一个会话的核心就是客户端的唯一标识,即 session id

你可能感兴趣的:(cookie和session辨析)