会话控制技术浅析

in 其他 with 0 comment

会话控制技术

HTTP 协议是 WEB 服务器与浏览器相互通信的协议,它是一种无状态协议,即每个 HTTP 请求之间是相互独立的。因此,HTTP 协议没有一个内建的机制来维护两个事务之间的状态。比如,当一个用户在请求一个页面后再去请求另外一个页面时,HTTP 将无法告诉我们这两个请求是否来自同一个用户。

在网站中,我们经常需要跟踪一个变量:通过对变量的跟踪,使多个请求事物之间建立联系,再根据授权和用户身份显示不同的内容、不同页面。这就是会话控制技术。

常用的会话控制技术有 Cookie 和 Session。简单地说,Cookie 是通过在客户端中记录信息而确定用户身份;Session 是通过在服务器端记录信息而确定用户身份。

  1. Cookie

工作原理:

  1. session

    工作原理:

    • 当浏览器第一次访问 PHP 脚本时,seesion_start() 函数会创建一个唯一的 Session ID(每个客户端都有一个唯一的标识),并自动通过 HTTP 的响应头,将这个 Session ID 保存到客户端 Cookie 中。同时,也在服务器端创建一个以 Session ID 命名的文件,用于保存这个用户的会话信息;

    • 当同一个用户再次访问这个网站时,会自动通过 HTTP 的请求头将 Cookie 中保存的 Seesion ID 再携带过来;

    • 服务器 PHP 脚本接受到客户端请求,这时 session_start() 函数就不会再去分配一个新的 Session ID,而是在服务器的硬盘中去寻找和这个 Session ID 同名的 Session 文件,将这之前为这个用户保存的会话信息读出。

    疑问:

    • 浏览器禁用cookie后php如何保持session会话?

      设置 php.ini 中的 session.use_trans_sid 设置为1

      当浏览器禁用cookie的时候,如果访问的URL为相对URL,则自动在 url 后缀中包含sessionID

    • session 的保存路径

      php.ini 中的 session.save_path

    • 如何共享session (分布式服务器的情况下)

      因为默认的是session 是以文件的形式保存的,在分布式服务器的情况下,可以采用 redis memcache 和数据库存储 。 参考 = 点我

    • 实现自定义 session 会话机制?

      通过session_set_save_handler实现自定义会话机制

    使用

    • 开启会话

      session_start()

    • 结束会话

      session_destory()

    扩展

    • session 如何连接redis
Comments are closed.