PHP Session

PHP Session


Session 简介

在 PHP 中,Session 是一种服务器端的机制,服务器使用一种散列表的结构(类似于 JSON)来保存信息。相比于保存在客户端的 Cookie,Session 将用户交互信息保存在了服务器端,使得同一个客户端每次和服务端交互时,不需要每次都传回所有的 Cookie 值,而是只需要传回一个 ID 即可,这个 ID 是客户端第一次访问服务器的时候生成的,而且是唯一的。

还有一点就是,因为 Cookie 存储在客户端,所以用户有权禁用 Cookie,而 Session 是存储在服务器端的,用户无法禁用。


Session 工作原理

我们可以使用 PHP 脚本创建和存储 Session 中的数据。在创建一个 Session 后,所有 Session 变量在用户一次会话期间里访问的所有页面都有效。其工作机制如下图所示。

php_session工作原理图


Session 的存储方式

Session 默认会以文本的形式存储在服务器的临时目录中,文件名以“sess_”作为前缀,后面加上“Session ID”,例如“sess_t5is1r7ct740dn390kuv3mpcse”。

我们可以在 php.ini 中找到 Session 的相关配置,下面是一些常用的配置信息:

session.save_handler = files                  #session 的存储方式,默认是文件,还可以是 redis 或者是 memcache
session.save_path = "d:/wamp/tmp"    #session 文件的存储目录
session.use_cookies = 1                        #是否使用 cookie 存储 session_id
session.name = PHPSESSID                  #客户端存储 session_id 的会话名
session.auto_start = 0                           #是否自动开启 session
session.cookie_lifetime = 0                   #设置客户端中存储的 session_id 的过期时间,以秒为单位
session.use_only_cookies=0                 #是否只使用 cookie 来处理 session_id
session.gc_divisor = 1000                     #进程比率
session.gc_probability = 1                    #垃圾回收的处理几率
session.gc_maxlifetime = 1440             #设置 session 文件的过期时间

Session 的生命周期

Session 在以下情况会被删除,也就是失效:

  • Session 超时,超时指的是连续一定时间服务器没有收到该 Session 所对应客户端的请求,并且这个时间超过了服务器设置的 Session 超时的最大时间;
  • 程序调用方法主动销毁 Session;
  • 服务器关闭或服务停止。

查看笔记

扫码一下
查看教程更方便