zoukankan      html  css  js  c++  java
  • 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至存储,如果不手工使用,则会在脚本结束时被自动执行。广州大理石机械构件

  • 相关阅读:
    tshark的命令使用
    svn log查看自己提交的记录
    账号安全 syyh
    Trivy 容器镜像扫描工具学习 syyh
    《关键对话》脑图整理 syyh
    Grafana 任意文件读取漏洞 (CVE202143798)学习 syyh
    容器安全管理 syyh
    【Sass/SCSS】我花4小时整理了的Sass的函数
    【JavaScript使用技巧】三个截取字符串中的子串,你用的哪个
    【SVG】为了前端页面的美丽,我选择学习SVG
  • 原文地址:https://www.cnblogs.com/furuihua/p/12206449.html
Copyright © 2011-2022 走看看