• php自定义Session的信息处理说明


    在系统中使用 Session 技术追踪用户时,Session 默认的处理方式是 Web 服务器中的文件来记录每个用户的会话信息,通过 php.ini 中的 session.save_path 创建会话数据文件的路径。这种默认的处理方式虽然方便,但也是有缺陷的。会严重影响系统的执行效率。最主要的原因是本身的 Session 机制不能跨机,因为对于访问量比较大的系统,通常会采用多台服务器进行并发处理,如果每台服务器都单独的处理 Session,就无法达到跟踪用户的目的。这时就需要改变 Session的处理方式,可以将 Session 信息使用共享技术保存到其他服务器中,或是使用数据库来保存 Session 信息。

    无论是用数据库,还是使用共享技术来共享 Session 信息,其中的原理基本是一样的,都是通过 PHP中 的 session_set_save_handler()函数来改变默认的处理方式,指定回调函数来自定义处理。该函数如下所示:

    1

    session_set_save_handler(open, close, read, write, destroy, gc)

    该函数共需要6个回调函数作为必选参数,分别代表了 Session 生命周期中的 6 个过程,通过自定义每个函数,来设置

    Session 生命周期中每个环节的信息处理。

    回调函数 描 述
    open 运行 session_start()时执行。该含税需要声明两个参数,系统会自动将php.ini 中的 session.save_path 选项值传递给该函数的第一个参数,将session 名自动传递到第二个参数中。返回 true 则可以继续向下执行。
    close 该函数不需要参数,在脚本执行完成或调用 session_write_close()、session_destroy()时被执行,即在所有 Session 操作完成后被执行。如果不需要处理,直接返回 true。
    read 在运行 session_start()时执行,因为在开启会话时,会去读取当前 session 数据并写入 $_SESSION 变量。需要声明一个参数,系统会自动将 Session ID 传递给该函数,用于通过 Session ID获取对应的用户数据,返回当前用户的会话信息写入 $_SESSION 变量
    write 该函数在脚本结束和对$_SESSION 变量赋值时执行。需要声明两个参数,分别是 Session ID 和串行化后的 session 信息字符串。在对$_SESSION 变量赋值时,就可以通过 Session ID 找到存储的位置,并将信息写入。存储成功后返回 true 并继续向下执行
    destroy 在运行session_destroy()时执行,需要声明一个参数,系统会自动将 Session ID 传递给该函数,去删除对应的会话信息。
    gc 在垃圾回收程序启动时执行。需要声明一个参数,系统会将 php.ini 中的 session.gc_maxlifetime 选项值传给该函数,用于删除超过这个时间的 Session 信息。返回 true 则可以继续向下执行。

    说明:在运行session_start()时分别执行了 open(启动会话)、read(读取当前 session 数据并写入 $_SESSION)和gc (清理垃圾)操作,脚本中所有对 $_SESSION 的操作均不会调用这些回调函数。在调用 session_destroy()函数时,执行destroy 销毁当前 session (一般是删除响应的记录或是文件),但此回调函数销毁的只是 session 的数据,此时如果输出https://www.furuihua.cn/product/

    $_SESSION 变量,任然是有值的,但此值不会在 close 后被写回去。在调用 session_wrte_close()函数时执行 write 和 close, 保存 $_SESSION至存储,如果不手工使用,则会在脚本结束时被自动执行。广州大理石机械构件

  • 相关阅读:
    windows server 2008 r2安装windows media player
    IE打开https网站时,取消证书问题提示
    取消IE、Office、Wmp首次开启提示
    testNG安装一直失败解决方法
    Jmeter接口测试问题及解决方法积累
    大数据:实时技术
    大数据:离线数据开发
    大数据:数据同步
    大数据:日志采集
    大数据:Hadoop(HDFS 读写数据流程及优缺点)
  • 原文地址:https://www.cnblogs.com/furuihua/p/12206449.html
Copyright © 2020-2023  润新知