ession 的工做机制:php
为每一个访问者建立一个惟一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或经过 URL 进行传导。算法
PHPSESSIONID的生产算法原理:服务器
一、hash_func = md5 / sha1 #可由php.ini配置cookie
二、PHPSESSIONID = hash_func(客户端IP + 当前时间(秒)+ 当前时间(微妙)+ PHP自带的随机数生产器)session
从以上hash_func(*)中的数据采样值的内容分析,多个用户在同一台服务器时所生产的PHPSESSIONID重复的几率极低。url
另外,黑客若是要猜出某一用户的PHPSESSIONID,则他也必须知道“客户端IP、当前时间(秒、微妙)、随机数”等数据方可模拟。spa
php.ini配置以下:.net
1code 2md5 3 4 5 6 7 8 9 |
|
PHP Session工做原理
如下以cookie传输PHPSESSID描述。
一、客户端请求一个php的服务端地址。
二、服务端收到请求,这次php脚本中包含session_start()
。
三、服务端会生成一个PHPSESSID
。(默认session存储方式为session.save_handler=files
,文件形式存储。生成的session文件名规则即为sess_PHPSESSID
,session文件存在session.save_path
中。)
四、服务端响应首部Response Headers:Set-Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50; path=/
。在客户端生成一个cookie保存此PHPSESSID
。
五、此时,客户端的cookie里面包含了PHPSESSID
,以后客户端的每次请求首部Request Headers
:Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50
。服务端以后每次接收到客户端的请求就都能根据这个PHPSESSID
来找到服务端的session文件,经过对这个session文件的读写操做即实现了session的超全局变量属性。
若是客户端禁用了cookie,因为没法使用cookie传递PHPSESSID
,那么客户端每次请求,服务端都会从新创建一个session文件,而没法经过经过PHPSESSID
来重用session文件,因此session也就失效了。
这种状况能够设置session.use_trans_sid
来传输PHPSESSID
,具体实现方式与cookie的区别就是将PHPSESSID
经过HTTP的GET
传输。每次请求的地址里面都会补全PHPSESSID参数”url?PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50
”来实现。
PHPcli模式经过session_id()使用session
能够经过它来获取当前会话的PHPSESSID,也能够经过它来设置当前的会话PHPSESSID。
PHPcli模式下能够经过设置这个,达到使用session的目的,很是方便。
例如:
1 2 3 4 5 |
|