为何要使用cookies和session
- cookies实际上是本地浏览器的一种储存机制,存在本地浏览器中,与服务器没有关系。其中存储着用户名密码,存储服务器返回的一些信息。这些储存的信息是以键值对存在某个特定的域名下的,比如百度下面的就把键值对放在百度的域名下,每个域名下的key 和value 是不能相互访问的
- 浏览器在发送每次的请求时,就把域名中储存的所有值发送给服务器,这样服务器就能看到浏览器自带了一些信息发送过来。
- **cookies 的不安全性:**因为信息存在于本地浏览器中,所以容易被窃取个人信息。就像CSRF攻击
- 基于上面这条的考虑,服务器用到了一种session 机制,根据用户名和密码,生成一段有过期时间的随机字符串(令牌的生成),发送给用户。注意,此时用户的cookies 里面是不带有用户名和密码的,用户只是带着这一串的随机字符串去访问网站,网站接收到了这一串字符串之后就可以判断用户是哪一个用户,就实现了自动登录功能了。
cookies 和 session 的区别
还有很重要的一点,如果把cookies 完全封禁,session 将不能使用(写过网站的朋友应该知道这一点)
登录网站时(转载内容)
- 如果web服务器端使用session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话的session_id,服务器根据当前session_id判断相应的用户,以确定用户是否登录或具有某种权限。由于数据是存储在服务器上面,所以不能伪造,但是如果你能够获取某个登录用户的 session_id,用特殊的浏览器伪造该用户的请求也是能够成功的。
- 如果浏览器使用的是cookie,那所有的数据都保存在浏览器端,比如登录后,服务器设置了cookie用户名,当再次请求服务器的时候,浏览器会将用户名发送给服务器。只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。如果你能够截获某个用户的 cookie变量,然后伪造一个数据包发送过去,那么服务器还是认为你是合法的。所以,使用cookie被攻击的可能性比较大。如果设置了的有效时间,那么它会将 cookie保存在客户端的硬盘上,下次再访问该网站的时候,浏览器先检查有没有 cookie,如果有的话,就读取该 cookie,然后发送给服务器。如果你在机器上面保存了某个论坛 cookie,有效期是一年,如果有人入侵你的机器,将你的 cookie拷走,然后放在他的浏览器的目录下面,那么他登录该网站的时候就是用你的的身份登录的。所以 cookie是可以伪造的。当然,伪造的时候需要主意,直接copy cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器