Cookie:中文“小甜饼”,通常我们直接使用英文发音。
Session:中文通常译为“会话”。
Cookie的特性:
- 数据集中于客户端,保存在文本文件中。
- 服务器端不持有任何数据。
- 每次提交URL请求时同一域名的Cookie将按照一定的原则发送给服务器端。
- Cookie具有有效期,未指定有效期的Cookie将在浏览器关闭时失效。
- 失效的Cookie将被浏览器直接删除。
- 全局性,同一域名的Cookie保存在同一文件中(这时候可以通过设置Cookie的路径来加以区分)。
这些特性就决定了Cookie是:
- 数据不安全,内容可以被伪造。
- 运行机制无状态的——即每次提交均互不关联。
- 对服务器资源没有影响。
Session的特性是:
- 数据集中于服务器端。
- 客户端仅保留本客户端此次Session的识别码(Session ID)。
- Session ID默认使用Cookie保存。但是也可以使用其他方式传送,例如URL改写。
- 每次提交URL请求时需要将此Session ID提交给服务器,服务器根据Session ID检索数据并返回结果。
这些特性决定了Session是:
- 数据安全。用户无法自行修改。
- Session ID不安全。只要用合法的方式提交了正确的Session ID,那么服务器就会返回相应的结果,这就存在着被恶意盗用的可能,也就是所谓的“会话劫持”。
- 运行机制有状态——Session在服务器上的运行是持续性的。
- 对服务器性能有影响。
为了解决Session存在的问题,Session机制自身使用了一些方法:
- 默认失效时间。通常Session会被设置为如果在30分钟内没有活动即被判为失效。以此解决服务器资源占用过多的问题。
- 生成的Session ID是难以猜测的长随机字符串。
针对会话劫持,目前最安全的办法莫过于使用SSL,使用数字证书验证,被破解的可能性微乎其微。