cookie:
Cookie是访问某些网站以后在本地存储的一些网站相关的信息,下次再访问的时候减少一些步骤。
浏览器端第一次发送请求到服务器端,服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端,浏览器端再次访问服务器端时会携带服务器端创建的Cookie,服务器端通过Cookie中携带的数据区分不同的用户
Cookie中一般包括如下主要内容:
- key:设置的cookie的key。
- value:key对应的value。
- max_age/expire_time:设置cookie的过期时间。
- domain:该cookie在哪个域名中有效。一般设置子域名,比如cms.example.com。
- path:该cookie在哪个路径下有效。
我们登录某一个网站时需要输入用户名及密码,如果用户名和密码保存为cookie,则下次我们登录该网站的时候就不需要再输入用户密码了。
session:
session是一种存在于服务器当作存储用户数据的类HashTable的结构。
浏览器第一次发送请求时,服务器当中就会生成这个HashTale和一个用来标识这个session的sessionID。然后服务器将这个sessionID响应给浏览器,等浏览器第二次请求服务器时会带上这个sessionID,然后服务器会再现存的sessionID中和从浏览器中传来的sessionID对比,看看有没有一样的,找到一样的,就可以访问这个sessionID所对应的HsahTble中所储存的数据了。
这样可以用来判断当前用户是否具有登录状态或者具有某种权限,因为session是存放再服务端的,所以数据无法伪造。
cookie和session的区别:
储存位置不同:
cookie数据保存在客户端,session数据保存在服务端。
存储容量大小不同
单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的cookie不能3K。
session存储容量大小没有限制。session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用cookie。
安全性不同
如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过去,那么服务器还是 认为你是合法的。所以,使用cookie被攻击的可能性比较大。cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,如果主要考虑到安全应当使用session。 session存储在服务器上,不存在敏感信息泄漏的风险,安全性较高。
存储有效期不同
session过期与否,取决于服务器的设定。cookie过期与否,可以在cookie生成的时候设置进去。服务器的设定:session在超过一定的操作时间(通常为30分钟)后会失效,但是当关闭浏览器时,为了保护用户信息,会自动调用session.invalidate()方法,该方法会清除掉session中的信息。