内置对象Cookie和Session有何不同【常见面试题】
我们在面试的时候,时常会被问到cookie和session的区别,对于初学者来说,有时候会混淆这两个内置对象。下面就我自己的理解,对这2个内置对象进行剖析。
1、session对象存在web服务器端,cookie对象存在用户的客户端(主要是web浏览器,比如你的搜狗浏览器,谷歌浏览器等)
用户客户端无法拿到session的值,但cookie就不一样,cookie是以一种文本的形式存储在浏览器中的,通过浏览器的一些web调试工具,我们可以轻易的看到cookie中的值。下面我们就通过谷歌浏览器的自带调试工具来查看下百度首页打开的时候会有哪些cookie信息。
首先谷歌浏览器打开百度首页,然后按下你电脑的f12键即可调出调试界面。如下图,切换到appliation页签界面,可以看到左下侧有个cookie菜单,点击后,右侧出现的即为当前页面的所含有的cookie信息。在列表中可以看到cookie的键名、cookie值以及过期时间等。
2、数据安全性:session存储的数据比较安全,cookie因为存储在用户浏览器本地,无法保证安全性。
因此一些机密的数据一定不能使用cookie进行存储,比如用户的密码、身份证号等关键信息一定不可存放在cookie,容易被他人窃取。
3、cookie的存储时间可以比session长很多,当然这个也看开发人员怎么设定,cookie存储在客户浏览器端可以设置1天、2天或者更长的有效期。但session一般在客户最后一次链接访问后2小时内即会失效,再次访问就需要重新建立session链接,这也是为何你登录一些网站后,长时间不操作,再次操作要求你重新登录的原因。
4、cookie还有下面这个特点,一个浏览器下同一个域名只能保存一份cookie键值对。
具体举栗子:比如某个管理系统的网站在登陆成功后,会将用户名写入到浏览器cookie中。如果张三打开了浏览器登陆这个管理系统,那么写入的cookie值就是cookie["name"]="张三"。张三登陆成功后,又新打开了个页签,登陆了李四的账号,那这时候在切回张三的页面,刷新网页,你看到的cookie值将会是李四,同时页面显示的内容也是李四的内容。后者覆盖了前者。
针对上述这个问题,有些浏览器可以通过打开子窗口方式解决了(重新双击浏览器图标打开新的浏览器窗口),注意是非打开子页签。
最后,附上我的asp.net学习群,欢迎各位同行入群指导交流。技术群:【asp.net技术社区】872894940