• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • session_gc()

    (PHP 7 >= 7.1.0)

    执行会话数据垃圾收集

    说明

    session_gc(void): int

    session_gc()用于执行会话数据GC(垃圾收集)。 PHP默认情况下会执行基于概率的会话GC。基于概率的GC可以工作,但是问题很少。

    • 1)- 在优先时间内,低流量站点的会话数据可能不会被删除。
    • 2)- 高流量站点的GC可能过于频繁。
    • 3)- GC是根据用户的请求执行的,用户将遇到GC延迟。
    因此,建议对于使用UNIX类系统的生产系统,例如使用“ cron”,定期执行GC。通过将session.gc_probability设置为0,确保禁用基于概率的GC。


    返回值

    session_gc()返回成功删除的会话数据的数量,失败则返回FALSE。旧的保存处理程序不返回已删除会话数据的数量,而仅返回成功/失败标志。在这种情况下,无论实际删除的数据如何,删除的会话数据的数量都变为1。


    范例

    Example #1session_gc()example for task managers like cron

    <?php
    // Note: This script should be executed by the same user of web server process.
    // Need active session to initialize session data storage access.
    session_start();
    // Executes GC immediately
    session_gc();
    // Clean up session ID created by session_gc()
    session_destroy();
    ?>
    

    Example #2session_gc()example for user accessible script

    <?php
    // Note: session_gc() is recommended to be used by task manager script, but
    // it may be used as follows.
    // Used for last GC time check
    $gc_time = '/tmp/php_session_last_gc';
    $gc_period = 1800;
    session_start();
    // Execute GC only when GC period elapsed. 
    // i.e. Calling session_gc() every request is waste of resources. 
    if (file_exists($gc_time)) {
        if (filemtime($gc_time) < time() - $gc_period) {
            session_gc();
            touch($gc_time);
        }
    } else {
        touch($gc_time);
    }
    ?>
    

    参见

    • session_start()启动新会话或者重用现有会话
    • session_destroy()销毁一个会话中的全部数据
    • session.gc_probability