cookie和session的区别及其应用场景
Cookies是一种会话对象。但是,cookie不占用服务器资源,而是存储在客户服务内存或一个cookie文本文件中;而“会话”会占用服务器资源。所以尽量不要用Session,用Cookies。但是我们普遍认为cookies不靠谱,session靠谱,但是目前很多知名网站也在用cookies。有时,为了解决cookie被禁用后的页面处理问题,通常会采用url重写技术,调用会话中大量有用的方法,从会话中获取数据并放入页面。
Cookies和会话应用场景:
Cookies的安全性能一直备受争议。虽然Cookies存储在这台机器上,但是它们的信息是完全可见的,并且很容易在本地编辑,这通常会导致许多安全问题。所以Cookies到底该不该用,怎么用,是有底线需要给的。
我们先来看看网站的敏感数据。
登录验证信息。通常,session ("logon") = true或false。
用户的各种隐私信息,如姓名等。在某些情况下,需要保存在会话中。
需要在页面之间传递的内容信息,比如调查,需要分成几个步骤。每个步骤的信息都保存在会话中,并最终更新到数据库中。
当然,还会有更多。下面是一些典型的。
如果一个人被撤回,不想接触会话,因为他认为如果用户不小心关闭了浏览器,所有之前保存的数据都会丢失。于是,出于好心,他决定用Cookies来存储所有这些使用Session的地方,这是完全可行的,基本操作也和使用Session一模一样。那么,下面是对以上三个典型例子的分析。
显然,只要一个故意的非法入侵者知道网站验证登录信息的Session变量是什么,他就可以提前编辑cookie,放入cookie目录中,从而顺利通过验证。这很可怕吗?
cookie是完全可见的,即使程序员设置了cookie的生命周期(比如只在用户会话期间有效),它们也是不安全的。假设用户忘记关闭浏览器或者有恶意的人把用户打昏了,那么用户的损失将是巨大的。
像上面这种,很容易被别人窃取重要的私人信息。但是,还有一个问题,就是信息量可能过大,使得Cookies的文件大小急剧增加。这不是用户希望看到的。
很明显,饼干不是那么好的饼干。但是,Cookies的存在当然有它的道理。它给了程序员更大的空间来发挥他们的编程才能。所以,使用Cookies是有底线的。总的来说,这个底线遵循以下原则。
不要保存私人信息。
对于任何重要的数据,最好以加密的形式保存数据(最简单的可以是URLEncode,当然也可以是完美的可逆加密方式。可惜最好不要用md5加密)。
是否保存登录信息由用户选择。
不要对超过10K的数据使用Cookies。
不要用Cookies玩让客户惊喜的小游戏。
然而,cookie最典型的应用是:
(1)判断用户是否登录过网站,以便下次直接登录。如果我们删除cookie,我们必须在每次登录时重新填写登录信息。
(B):另一个重要的应用是购物车中的类的处理和设计。用户可能会在一段时间内在同一网站的不同页面上选择不同的产品。他们可以将所有这些信息写入cookie,并在最终付款时从cookie中提取出来。当然,我们需要考虑安全性和性能问题。