web项目---cookie和session的区别

前言

HTTP是一种无状态的协议,为了分辨链接是谁发起的,就需要我们自己去解决这个问题。不然有些情况下即使是同一个网站我们每打开一个页面也都要登录一下。而Session和Cookie就是为解决这个问题而提出来的两个机制。

什么是cookie和session

 cookie:

在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。

通俗讲,Cookie是访问某些网站以后在本地存储的一些网站相关的信息,下次再访问的时候减少一些步骤。另外一个更准确的说法是:Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器,是一种在客户端保持状态的方案。Cookie的主要内容包括:名字,值,过期时间,路径和域。使用Fiddler抓包就可以看见,比方说我们打开百度的某个网站可以看到Headers包括Cookie.

session:

Session是存在服务器的一种用来存放用户数据的类HashTable结构。session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。

当浏览器 第一次发送请求时,服务器自动生成了一个HashTable和一个Session ID用来唯一标识这个HashTable,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。

应用场景

在我们登录一个网站时,今天输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。 

session的一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息,这里就用到了session。

 一个网站请求时cookie和session应用的整个过程:

· 如果web服务器端使用的是session,那么所有的数据都保存在服务器上,

客户端每次请求服务器的时候会发送当前会话的sessionid,服务器根据当前sessionid判断相应的用户数据标志

,以确定用户是否登录或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造,

但是如果你能够获取某个登录用户的sessionid,用特殊的浏览器伪造该用户的请求也是能够成功的。

sessionid是服务器和客户端链接时候随机分配的,一般来说是不会有重复,但如果有大量的并发请求,

也不是没有重复的可能性.

· 如果浏览器使用的是cookie,那么所有的数据都保存在浏览器端,比如你登录以后,

服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,

这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,

所以能够保证长时间不掉线。如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过去,

那么服务器还是认为你是合法的。所以,使用cookie被攻击的可能性比较大。如果设置了的有效时间,

那么它会将cookie保存在客户端的硬盘上,下次再访问该网站的时候,浏览器先检查有没有 cookie,

如果有的话,就读取该cookie,然后发送给服务器。如果你在机器上面保存了某个论坛 cookie,

有效期是一年,如果有人入侵你的机器,将你的cookie拷走,然后放在他的浏览器的目录下面,

那么他登录该网站的时候就是用你的的身份登录的。所以cookie是可以伪造的。当然,伪造的时候需要注意,

直接copy cookie文件到cookie目录,浏览器是不认的,他有一个index.dat文件,存储了cookie文件的建立时间,

以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从有效时间上骗过浏览器。

cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、  将登陆信息等重要信息存放为SESSION
        其他信息如果需要保留,可以放在COOKIE中

你可能感兴趣的:(javaweb)