笔试题:cookie和session的区别?禁止cookie后,session还能用吗?
关于cookie:
https://zh.wikipedia.org/wiki/Cookie
cookie的分类:
Cookie保存在客户端,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。
内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的(非持久cookie)。
硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的(持久Cookie)。
cookie的作用:
因为HTTP协议是无状态的,所以服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。
1.在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两瓶饮料。
最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么。
所以Cookie就是用来绕开HTTP的无状态性的“额外手段”之一。服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。
在刚才的购物场景中,当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段Cookie,记录着那项商品的信息。
当用户访问另一个页面,浏览器会把Cookie发送给服务器,于是服务器知道他之前选购了什么。
用户继续选购饮料,服务器就在原来那段Cookie里追加新的商品信息。
结帐时,服务器读取发送来的Cookie就行了。
2.Cookie另一个典型的应用是当登录一个网站时,网站往往会请求用户输入用户名和密码,并且用户可以勾选“下次自动登录”。
如果勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登录了。
这正是因为前一次登录时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的Cookie到用户的硬盘上。
第二次登录时,(如果该Cookie尚未到期)浏览器会发送该Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。
cookie的缺陷:
1.cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
2.由于在HTTP请求中的cookie是明文传递的,所以安全性成问题。(除非用HTTPS)
3.Cookie的大小限制在4KB左右。对于复杂的存储需求来说是不够用的。
注:
1.用户可以改变浏览器的设置,以使用或者禁用Cookies。
2.cookie中不但可以确认用户,还能包含计算机和浏览器的信息
2.1 如果在一台计算机中安装多个浏览器,每个浏览器都会以独立的空间存放cookie。
2.2 识别不准确
2.2.1 一个用户用不同的浏览器登录或者用不同的计算机登录,都会得到不同的cookie信息
2.2.2 对于在同一台计算机上使用同一浏览器的多用户群,cookie不会区分他们的身份,除非他们使用不同的用户名登录
反对cookie的理由:
1.识别不准确(如上所列)
2.用户隐私、安全和广告
cookies包含了一些敏感信息:用户名,电脑名,使用的浏览器和曾经访问的网站。
用户不希望这些内容泄漏出去,尤其是当其中还包含有私人信息的时候。
3.偷窃cookie,脚本攻击
3.1 Cookie盗贼:搜集用户cookie并发给攻击者的黑客。攻击者将利用cookie信息通过合法手段进入用户帐户。
3.2 Cookie投毒:一般认为,Cookie在储存和传回服务器期间没有被修改过,而攻击者会在cookie送回服务器之前对其进行修改,达到自己的目的。
例如,在一个购物网站的cookie中包含了顾客应付的款项,攻击者将该值改小,达到少付款的目的。这就是cookie 投毒。
关于session:
session是一种服务器端的信息管理机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),
如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),
如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,
session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。
保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器
session产生的session_id放在cookie里面,如果用户把cookie禁止掉,是不是session也不能用了呢?
禁止掉cookie后,session可以用,不过通过其他的方式来获得这个sessionid,
比如,可以跟在url的后面,或者以表单的形势提交到服务器端。从而使服务器端了解客户端的状态。
cookie 和session 的区别:
1. session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。
2. session中保存的是对象,cookie中保存的是字符串。
3. session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。
4. session的sessionID是放在cookie里
5. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE盗窃、投毒。session更安全。
5.1 session的sessionID是放在cookie里,要想功破session的话,要先功破cookie。
5.2 sessionID是需要有人登录或者启动session_start才会有,攻击者不知道什么时候会有人登录。
5.3 sessionID是加密的,第二次session_start的时候,前一次的sessionID就没有用了,session过期时sessionid也会失效,
想在短时间内功破加了密的 sessionID很难。session是针对某一次通信而言,会话结束session也就随着消失了。
817

被折叠的 条评论
为什么被折叠?



