PHP如何配置session?底层原理是什么?

配置 PHP Session 及底层原理

配置 PHP Session

  1. 基本配置: 在 php.ini 文件中配置 session 相关参数:

    • session.save_path:指定 session 文件的存储路径。
    • session.name:设置 session 的名称。
    • session.cookie_lifetime:设置 session cookie 的有效时间(以秒为单位)。
    • session.gc_maxlifetime:设置 session 数据的最大生命周期。

    示例配置:

    ini
    session.save_path = "/path/to/sessions" session.name = "MY_SESSION" session.cookie_lifetime = 3600 session.gc_maxlifetime = 1440
  2. 在代码中使用

    • 启动 session:在 PHP 脚本的开头使用 session_start()
    • 设置 session 变量:$_SESSION['key'] = 'value';
    • 读取 session 变量:$value = $_SESSION['key'];
    • 删除 session 变量:unset($_SESSION['key']);
    • 销毁 session:使用 session_destroy() 函数。

    示例代码:

    php
    <?php session_start(); // 设置 session 变量 $_SESSION['user'] = 'John Doe'; // 读取 session 变量 echo $_SESSION['user']; // 删除 session 变量 unset($_SESSION['user']); // 销毁 session session_destroy(); ?>
  3. 配置文件: 在 .htaccess 文件中配置 session 相关参数:

    apache
    php_value session.save_path "/path/to/sessions" php_value session.cookie_lifetime 3600 php_value session.gc_maxlifetime 1440

底层原理

  1. Session 文件存储: PHP 默认将 session 数据存储在服务器的文件系统中,每个 session 对应一个文件。文件路径由 session.save_path 指定。每个文件以 session ID 为文件名,包含该 session 的所有数据。

  2. Session ID 生成和传递

    • 生成:PHP 使用 session_start() 函数时生成一个唯一的 session ID。
    • 传递:PHP 将 session ID 发送给客户端,通常通过 cookie 传递(PHPSESSID 是默认的 cookie 名称)。客户端在后续请求中发送这个 session ID,以便服务器能够识别和恢复对应的 session 数据。
  3. 垃圾回收

    • 清理过期数据:PHP 的垃圾回收机制定期清理过期的 session 文件。这个机制基于 session.gc_maxlifetime 设置的最大生命周期和 session.gc_probabilitysession.gc_divisor 这两个参数的概率设置。
    • 配置:这些参数在 php.ini 文件中配置,用于控制垃圾回收的频率和行为。
  4. Session 数据的存取

    • 读取:在 session_start() 后,PHP 从存储的 session 文件中读取数据,并将其加载到 $_SESSION 超全局数组中。
    • 写入:对 $_SESSION 超全局数组的任何修改都会在脚本执行结束时保存回 session 文件。

关键字

PHP, session, 配置, php.ini, session_start(), session ID, 文件存储, 垃圾回收, $_SESSION, session 变量