网站地图    收藏   

主页 > 后端 > 网站安全 >

解读cookie和session的混乱概念 - 网站安全 - 自学

来源:自学PHP网    时间:2015-04-17 14:47 作者: 阅读:

[导读] 前几日,因为一些Web的基础概念和职业欠钱兄弟讨论了很久,其中对于session的问题讨论最久,因为各自对session名词和概念的理解不同有了一些小争议,我们俩都知道是什么东西,可就是...

前几日,因为一些Web的基础概念和职业欠钱兄弟讨论了很久,其中对于session的问题讨论最久,因为各自对session名词和概念的理解不同有了一些小争议,我们俩都知道是什么东西,可就是都木有办法表达清楚,最后绕了个大弯才达成和解,我们彼此只是各自的理解错位了名词的概念而已,于是我决定把这万恶的session一词多义概念给科普下:

 

首先,http协议原始被设计成了无状态协议,无状态协议通俗点说就是一来一回发个包就木有连接了,后来http 1.1协议支持长连接了,但本质上还是无状态,html5 websocket 就是为了解决这一弊端所设计的,这些是后话了~

 

因为http协议是无状态协议,无法保存用户状态,于是便整出了“session机制”,让服务端来保存用户的状态的这一方式。

 

一般脚本语言都会原生支持“session机制”,如PHP程序配置:

设置php.ini的session.use_trans_sid = 1,PHP自动在URL里传递session id

设置php.ini的session.use_cookies = 1,使用cookie在客户端保存session id

 

PHP中的session有效期默认是1440秒(24分钟),也就是说,客户端超过24分钟没有将session id传递过来,服务端就会把session销毁,底层实际上就是服务端的一个一个session文件。 

 

到此,如果理解了这些,我们就可以明晰session的概念了:

很多人将session和cookie说成是两个东西,这是极其不负责的。

session和cookie本质上确实是两个东西,但cookie同时也是session id的载体,把session和cookie放在一起讲,包含了session id的cookie应该称为session cookie。象session url和session cookie,它们只是“session机制”中两个不同的实现方式。

 

把cookie单拎出来讲,在客户端可以分为内存cookie和本地cookie,浏览器通过cookie的expires字段决定其保存在本地的有效时间,如果未设置expires字段就是内存cookie,结束浏览器进程即消失。cookie在客户端被删除不影响服务端session,服务端session会在有效期过后自动销毁。

 

session还有另外一个翻译名词叫“会话”,会话是指多个不同客户端发出不同请求之间的关联关系,简单的说就是HTTP协议依靠session机制来判断客户端的状态,活例子就是同一个账户在两个地方登陆,有人在一个地方改了这个账户的密码,另外一个地方还能发微博,web程序的身份认证只认session,无法知道你改了密码。

 

现在,各种web程序已经自己实现了“session机制”,比如discuz程序,我之前的博客“discuz sessoin hijack tips 续”中我提到了根据HASH,UID和UCKEY伪造session的方法,其实这里就体现出了我对于sessoin名词的理解差异和表达错误:

1. discuz这个sessoin其实不是传统意义上的sessoin,而是token,他只是参照“session机制”来模拟的用户身份认证。

2. 这个不叫hijack(劫持),是彻彻底底的伪造一个新token,而discuz是以数据库方式保存token的。

 

最后,通过我和职业欠钱兄弟的教训,以后我们讨论技术,切忌不要用单独的名词来讨论笼统的东西,因为一个session的词汇,它能表达出多种含义:

session机制

服务端的session文件

session id

session url

session cookie

会话

模拟“session机制”的token

 

ps:

根据redzl网友的意见修改了下本文,session和cookie本质上是两个东西,但概念实在模糊,session一词包含的意义太多,所以本文主题只是分解session的各种含义

 

摘自:RAyh4c的黑盒子

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论