自定义session存储方式

默认情况下,session是存储在文件中的,每个用户请求过来都会对session文件进行读写,系统对文件的读写消耗比较大,效率也低下,所以在开发过程中一般是不选择文件作为存储session的方式?
php支持用户指定的存储方式,一般是存储在数据库或者是memcache中,如果需要指定存储方式需要在php.ini里设置:

session.save_handler="user" //user表示支持用户自定义设置。

其实自定义设置和默认设置的操作过程是一样的,只不过是操作对象不同而已,比如默认是操作文件,自定义改为操作数据库。除此之外,默认的处理行为也由系统自动处理改为开发人员自定义方式处理。
php提供了session_set_save_handler()函数来改变默认的处理方式,也就是说session生命周期的几个过程都讲由该函数来实现。
session_set_save_handler(open,close,read,write,destroy,gc)函数接受六个回调函数,代表着session的六个过程。

  • open($save_path,$session_name)
    该函数接受两个参数,系统会自动把php.ini里的session.ave_path传给第一个参数,把session.name传给第二个参数。该函数返回true可以继续向下执行。该函数时在调用session_start()是自动触发回调执行。
  • close()
    该函数没有参数,是在调用session_destroy()或者session_write_close()时被回调执行,做一些sesion被销毁后的工作,如果什么也没有做,就直接返回true.
  • read
    read($session_ID)
    该函数只有一个参数,是sessionID,该函数是在客户端在cookie里携带sessionID后在,在session_start()调用是被回调执行,负责从自定义的数据结构里读取数据放在$_SESSION里,返回当前用户的会话信息写在$_SESSION变量。
  • write($sessionID, $session_data)
    该函数接受两个参数,第一个参数是sessonID,第二个参数是串行化后的session信息。该函数在脚本执行完或者是对$_SESSION赋值是被执行,该函数通过参数sessionID找到对应的session数据结构,把session_data写进去。
  • gc($maxlifttime)
    该函数在垃圾回收机制启动时被执行,需要一个参数,系统自动将php.ini里的session.gc_malifttime的值传给该函数,用于删除超过这个时间的sessionx信息,返回true可以继续向下执行。
    至此自定义的session存储的几个过程就结束了。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • session原理总结[转] 之前在学校的时候,只知道session与cookie的区别在于:session是保存...
    foolgry阅读 603评论 0 1
  • Session的声明与使用 Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_...
    寻回骄傲阅读 2,967评论 0 18
  • PHP中的session有效期默认是1440秒(24分钟)【weiweiok 注:php5里默认的是180分】,也...
    littlexjing阅读 4,829评论 0 1
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,384评论 1 17
  • Hi,你好,认识你很开心。我是(Allison)平姐,这是我日更的第168篇文章。 一个人不断成长的过程,就是公开...
    茉莉Allison阅读 853评论 0 0