您的位置:首页 > 理论基础 > 计算机网络

http相关的session及cookie的工作原理与身份认证

2012-09-10 16:13 176 查看
类型选原创是有点惭愧

其实是我看了这篇文章的总结:http://blog.csdn.net/kgd1120/article/details/2159458

写得很好,就是略长,后面java的httpsession我就没看了

正题:

经常上98什么的时候,发现只要不点退出,直接关闭浏览器,下次打开还是登录状态。(这和记住密码不一样,记住密码是浏览器的功能,还是需要再登录的)

而淘宝人人等一些网站,基本上是下次打开就是退出状态了。

一直对这个比较迷惑,今天终于想到去查了一下,看了上面提到的文章,解了大惑。

下文中所谓的身份认证是指登录后,认证的有效时间内,如何识别有效的身份。

首先,是几个概念:

session:是服务器端为每一个访问用户保存的一系列状态数据。一般身份认证的信息可以存在session中。

不同的服务器端语言对session有自己的实现。文首提到的文章有个很好的比喻,session就相当于会员卡,每次访问提供session标识(cookie或者url参数),就可以访问session保存的一些信息。服务器端编程中的session变量就属此范围。

服务器一般不主动的删除这个session,除非设置了过期时间。(淘宝等网站应该是这种情况,为安全考虑;比如人离电脑一段时间)。session并不会因为浏览器的关闭而删除数据,除非使用脚本在关闭浏览器是发送删除session的请求,因为服务器端根本无从知道客户端的状态,这是http协议的局限。

cookie:是浏览器中保存的点值对,这个概念很简单。理论上cookie也能保存任意的数据,不单是用来认证session,事实上很多网站也是这么做的(比如,无需登录的“最近浏览”功能)

文中同样有个比喻,cookie就像一张打孔的游泳卡,用来在客户端保持状态。

而在上述的身份验证的例子中就是拿cookie来做session token的东西(session也可以通过url重写来认证),每次提交这个cookie到服务器来认证身份,这样,只要不显式的调用退出操作,只要每次发送这个cookie,就可以自动的通过身份认证。cookie也是有过期时间的。如果不设置过期时间,则在关闭浏览器时销毁该cookie,称为会话cookie。(会话cookie:ie的情况是使用菜单->文件->新建窗口来建立的窗口都共享cookie,若新开进程,则不共享;而firefox是同一窗口新开标签共享cookie,新开窗口也共享。((我电脑上的firefox是这样。。不知道是不是因为装了什么,真奇怪))相信大家用ie上网都有注意到这现象:登录一些网站,ctrl-n新开窗口,会保持登录状态,新开进程,则不保持。)这种身份认证的方法不太安全,因为它只认cookie,完全可以被拷贝修改到其他电脑,当然也可以考虑加上其他如ip等信息来加强。

淘宝等网站使用的就是会话cookie,关闭后自动销毁。

总结一下,身份认证中,session可以用来保存身份信息,可以通过认证session来认证身份。

服务器端session是语言实现的,如不设置过期,不会主动删除。这意味着用户若不主动退出,可以一直通过session token来保持登录状态。

cookie是认证session的一种手段,若不设置过期时间,关闭浏览器自动销毁;否则可以在有效期内使用。98等论坛就是使用cookie保持登录(服务器端不设置过期,或者设置成和cookie过期时间相同,因为保持session会占用服务器资源。)

ps:不清楚的请参考文首原文。。
http://blog.csdn.net/kgd1120/article/details/2159458
这篇也可以参考:
http://bettereveryday.iteye.com/blog/1108452
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息