自定义Session处理方式

上传人:鲁** 文档编号:549482375 上传时间:2023-06-10 格式:DOCX 页数:3 大小:10.83KB
返回 下载 相关 举报
自定义Session处理方式_第1页
第1页 / 共3页
自定义Session处理方式_第2页
第2页 / 共3页
自定义Session处理方式_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《自定义Session处理方式》由会员分享,可在线阅读,更多相关《自定义Session处理方式(3页珍藏版)》请在金锄头文库上搜索。

1、在系统中使用Session技术跟踪用户是,Session默认的处理方式是使用Web服务器中的文 件来记录每个用户的会话信息,通过php.ini中的session_save_path创建会话数据文件的路 径。这种默认的处理方式虽然很方便,但也有一些缺陷。例如,登录用户如果非常大,文件 操作的 I/O 开销就会很大,会严重影响系统的执行效率。另外,最主要的是本身的 session 机制不能跨机,因为对象鱼访问量比较大的系统,通常都是采用多台 web 服务器进行并发 处理,如果每台web服务器都各自独立地处理啊Session,就不可能达到跟踪用户的目的。 这时就需要我们来改变session的处理方式

2、,常见的跨机方法就是通过自己定义session的存 储方式,可以将session信息使用NFS或SAMBA等共享技术保存到其他服务器中,或使用数 据库来保存session信息,最优的方式是使用memcached来进行session存储。自定义 session 的存储机制无论是用memcached、数据库、还是通过NFS或SAMBA共享session信息,其原理是一样 的,都是通过PHP中的session_set_save_handler()函数来改变默认的处理方式,指定回调函 数来自定义处理。该函数的原型如下:Session_set_save_hander(callback open,call

3、back close,call read,callback write,callback destro,callback gc);该函数供需要6个回调函数作为必选参数,分别代表了 Session声明周期中的6个过程,用 户通过自定义每个函数,来设置Session生命周期中每个环节的信息处理。回调函数的执行 时机回调函数描述ope n在运行session_start()时执行,该函数需要声明两个 参数,系统会自动将php.ini中的session_save_path选 项值传递给该函数的第一个参数,将Session名自动传 递给第一个参数中,返回true则可以继续向下执行.close该函数不需要

4、参数,在脚本执行完成调用 session_write_close()、session_destroy()时被执行,即在 所有session操作完成后被执行。如果不需要处理,则 直接放回true即可read在运行session_start()时执行,因为在开启会话时,会 去read当前session数据并与入$_SESSION变量。需要 声明一个参数,系统会自动将Session ID传递给该函数, 用于通过Session ID获取对应的用户数据,返回当前用 户的会话信息写入$SESSION变量write该函数在脚本结束和地$_SESSION变量赋值数据时执 行。需要声明两个参数,分别是Sessi

5、onID和串行化后 Session信息字符串。在堆$_SESSION变量赋值时,就可 以通过Session ID找到存储的位置,并将信息写入。存 储成功可以返回true继续向下执行destroy在运行session_destroy时执行,需要声明一个参数,系 统会自动将Session ID传递给该函数,去删除对应的会 话信息gc垃圾回收程序启动时执行。需要声明一个参数,系统自 动将php.ini中的session_gc_maxlifetime选项值传给该 函数,用于删除超过这个时间的Session信息,返回true则可以继续向下执行在运行session_start(0时分别执行了 open(启

6、动会话)、read(读取session数据至$_SESSION) 和 gc( 清理垃圾 ),脚本中所有对 $_SESSION 的操作均不会调用这些回调函数。在调用 session_destroy函数时,执行destroy销毁当前session(一般是删除相应的记录或文件),但 此回调函数销毁的只是Session的数据,此时如果输出$_SESSION变量,仍然有值得,但此 值不会再close后被写回去爱。在调用时session_write_close()函数时执行write和close,保 存$_SESSION至存储,如果不手工使用此方法,则会在脚本结束时被自动执行 注意:session_set

7、_save_hander()函数必须在 php.ini 中设置 session_save_hander 选项的值 为user时(用户自定义处理器),才会被系统调用。下例通过自定义的处理方式, 将 Session 信息写入到文件中。 首先将 php.ini 中的 session.save_hander选项值改为user或使用ini_set()函数在当前脚本中临时改变Session的 处理方式为user?php$sess_save_path =;Function open($save_path,$session_name)Global $sess_save_path;$sess_save_path

8、 = $save_path;Return true;Function close()Return true;Function read($id)Global $sess_save_path;$sess_file =$sess_save_path/sess_$id;Return (string) file_get_contents($sess_file);Function write($id,$sess_data)Global $sess_save_path;$sess_file =$sess_save_path/sess_$id;If($fp=fopen($sess_file,w)$retur

9、n = fwrite($fp,$sess_data);Fclose($fp);Return $return;elseReturn false;Function destroy($id)Global $sess_save_path;$sess_file =”$sess_save_path/sess_$id”;Return (unlink($sess_file);Function gc($maxlifetime)Global $sess_save_path;Foreach(glob(“$sess_save_path/sess_*”) as $filename) If(filemtime($filename)+$maxlifetimetime() unlink($filename);Return true;Session_set_save_hander(“open”,”close”,”read”,”write”,”destroy”,”g);c” Session_start();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号