1.cookie
cookie分为两种:
①以文件的方式存储在硬盘空间上的长期性的cookie:比如登录时填写的一些信息会被以文件的方式放在客户端的硬盘上。
②停留在浏览器所占内存的临时性的cookie。当用户登录后,session会让cookie产生一个session_id,这个id是存于浏览器所占的内存当中。你关闭浏览器后,id也要消失。
cookie采用的是客户端保持状态的方案,它是客户端的会话状态的一种存储机制。他是服务器在本地机器上存储的小段文本或者是内存中的一段数据,并随着每一个请求发送至同一个服务器。
2.什么是session
session是一种服务器端的信息管理机制,它把这些文件信息以文件的形势存放在服务器的硬盘空间上,这种情况是默认的,可以用memcache把这种数据放到内存里面。请参考web集群时利用memcache来同步session
注意:session产生的session_id放在cookie里面,如果用户把cookie禁止掉,是不是session也不能用了呢?禁止掉cookie后,session当然可以用,不能通过其他的方式获取这个session_id,比如跟在url后面,或者以表单形式提交到服务器,从而使服务器端了解客户端的状态
当客户端向服务器发出请求时,要求服务器端产生一个session时,服务器端会先检查一下,客户端的cookie里面有没有session_id,是否已经过期。如果有这样的session_id的话,服务器端会根据cookie里的session_id把服务器的session检索出来。如果没有这样的session_id的话,服务器端会重新建立一个。PHPSESSID是一串加了密的字符串,它的生成按照一定的规则来执行。同一客户端启动二次session_start的话,session_id是不一样的。
3.session和cookie谁更安全
就个人而言,我觉得session更安全一点,我以下几点看法。
1,如果session和cookie一样安全的话,二者就没有并要同时存在了,只要cookie就好了,让客户端来分提服务器的负担,并且对于用户来说又是透明的。何乐而不为呢。cookie主要前后端都可以修改,而session不行,也不需要通过协议传递。
2,session的sessionID是放在cookie里,要想功破session的话,第一要功破cookie。功破cookie后,你要得到 sessionID,sessionID是要有人登录,或者启动session_start才会有,你不知道什么时候会有人登录。第二,sessionID是加密的,第二次session_start的时候,前一次的sessionID就没有用了,session过期时sessionid也会失效,想在短时间内功破加了密的 sessionID很难。session是针对某一次通信而言,会话结束session也就随着消失了,而真正的cookie存在于客户端硬盘上的一个文本文件,谁安全很显然了。
3,如果session这么容易被功破,这么不安全的话,我想现有的绝大部分网站都不安全了。