会话处理解决什么问题http(超文本传输协议)定义了通过万维网(www)传输文本、图形、视频和所有其他的数据的规则。http是一种无状态协议,每次请求的处理,都与之前和之后的请求无关。
会话处理是这种无状态问题的解决办法。它的实现方式是为每一位网站访问者分配一个称为会话id(sid)的唯一标志属性,然后将此sid与任意数量的数据关联。
会话处理流程浏览器向服务器发送请求服务器为访客建立会话id(sid),通常sid存储在服务器端一个文件中。存储在客户端($_cookie[‘phpsessid’]或者url参数)浏览器再次向服务器发送请求服务器通过读取cookie(或者url的参数)来验证sid是否依然同一次会话离开网站,会话结束问题sid是如何被写到cookie中去?php 会话启动以后,会给每个访客分配一个sid,这个sid同时会写到客户端的cookie中去,默认cookie变量名为:phpsessid。这里说同时是不确切的因为下页代码只会在刷新页面以后,才能取到cookie:
session_start();echo('sid:'.session_id().'');echo('cookie_sid:'.$_cookie['phpsessid'].'');
cookie被禁用了,session会不会同时失效?在没有做任何准备的情况下,客户端禁用cookie确实会让session失效。书上(php与mysql程序设计 第三版)说,客户端存储sid的方式有两种,一种是cookie,一种是重写url来传递。可以在php.ini文件中更改session.use_trans_sid的值,来实现url的自动重写,但笔者没有做测试。
会话在服务器端的存储方式默认情况下,session 以文件方式存储在服务器上。在php.ini文件中可做相关设置:
session.save_handler=files session.save_path = n;mode;/path
save_handler值有四个:
files 平面文件mm 共享内存sqlite sqlite数据库user 用户自定义函数通过user方式,可以用自定义函数与会话配合,看上去功能很强大。但没时间去实操。有空再研究。
版权声明:本文为博主原创文章,未经博主允许不得转载。
