`

关于Session中的session.gc_*

    博客分类:
  • PHP
阅读更多
关于登录超时,自动退出页面的问题!


我的做法是: 通过Session 控制

失败1:在 php.ini 中设定 session 失效的时间,我设置session.gc_maxlifetime为180,可是我等了足足5分钟(可能有8分钟),可是我依然能进入系统.设置后有重启linux.

失败2:在 程序中插入函数 ini_set('session.gc_maxlifetime',180);(session_start前加入),超时后依然能进入.


一开始我也不是很明白,想当然的以为这个是用来控制Session文件的.这里设置的时间,过期后,/tmp/sess_*的文件就会自动删除.

后来自己做了一下测试好象也不行.

看文档发现,在session的configure option中有三个关于gc的,分别是:


session.gc_probability "1" PHP_INI_ALL
session.gc_divisor "100" PHP_INI_ALL Available since PHP 4.3.2.
session.gc_maxlifetime "1440" PHP_INI_ALL



咱们一个个看.

首先 gc是什么?

gc, 是garbage collection 的简称.这个进程一般都跟着每起一个SESSION而开始运行的.gc目的是为了在session文件过期以后自动销毁删除这些文件. 大家应该猜到三个参数的大致用处了吧?

1、session_gc_probaility

PHP默认不是每个SESSION启动都会启动一个GC来跟踪。这个参数是控制gc跟session启动概率。默认 1。值越大,概率越大。

2、session.gc_divisor

功能同上。 默认100。值越小,概率越大。

3、session.gc_maxlifetime

超过设定时间,gc就认为是垃圾文件。

总结

session_gc_probaility和session.gc_divisor是一对控制gc启动的概率的两个参数。前者是分子,后者是分母。默认是1/100。 1%的几率。 也就是说100个请求中只有一个gc会伴随100个中的某个请求而启动。


而关于SESSION 过期大家也应该有更明确的认识

只有session.cookie_lifetime 控制SESSIOn的过期时间.

可以通过直接修改ini,或者通过ini_set();以及session_set_cookie_params()来修改。


<?php
ini_set("session.gc_divisor", 1);
ini_set("session.gc_maxlifetime", 5);
ini_set("session.cookie_lifetime", 10);

session_start();

if (isset($_SESSION['test']))
{
echo SESSION_ID();
echo "<br>";
echo $_SESSION['test'];
}
else
{
$_SESSION['test'] = date("Y-M-D H:i:s");
}

echo "<br>";
echo ini_get("session.gc_maxlifetime");
echo "<br>";
echo ini_get("session.cookie_lifetime");


?>


这种情况下,gc的最大过期时间比 Session的过期时间短,但是还是按照session的过期时间过期。

注意: WEB是触发式的。所以在你直接关闭IE的情况下,session文件也是依然会存在的。

注意:
1、session默认以文件方式保存,不过太多的session在一个目录下是不利于存取的。php.ini里面有个设置可以让session分子目录保存
session.save_path = "N;/path" N表示几级子目录,比如你可以设置成 session.save_path = "2;/tmp"
但是你设置成分子目录后,原来的garbage collection 就没用了,需要你自己去清楚过期session,比如用个shell定时执行。
(以上内容大家仔细看看php.ini里面的注释就知道了)

2、很多人都习惯在php程序的头部打开session就不管它了,程序结束会自动关闭session的。不过从性能上考虑session应该尽早关闭,特别是多于执行时间比较长的程序。因为session文件在打开的时候是独占的,比如a.php打开了的session文件后并不关闭,而本身程序要执行比较长时间。同时你打开了b.php也是需要session的,就要等a.php执行完才能打开了。

所以建议a.php预先处理好session,然后关闭它,在执行其他功能。

分享到:
评论

相关推荐

    h函数session.zip_session

    在IT领域,尤其是在Web开发中,`session`是一种非常重要的技术,用于跟踪用户的状态和信息。`session`机制允许服务器端存储用户特定的数据,以便在多个页面请求之间保持上下文。下面我们将深入探讨`session`的工作...

    PHP session有效期session.gc_maxlifetime

    一个已知管用的方法是,使用session_set_save_handler,接管所有的session管理工作,一般是把session信息存储到数据库,这样可以通过SQL语句来删除所有过期的session,精确地控制session的有效期。这也是基于PHP的...

    php中实现精确设置session过期时间的方法

    如果你希望更精确地控制session过期,你可以调整`session.gc_probability`和`session.gc_divisor`的值,例如,将`session.gc_divisor`设为1,使得每次请求都进行GC检查。但这样做可能会增加服务器的负担,因为GC过程...

    session 学习要点

    - 当 `session_start()` 被调用时,如果设置了 `session.gc_probability` 和 `session.gc_divisor`,则有一定概率触发 Session 数据的清理操作。 #### 三、自定义Session存储方式 1. **使用 `session_set_save_...

    PHP中session全面教程.txt

    2. **session.gc_maxlifetime**: 设置Session数据的最大存活时间。 3. **session.save_path**: 指定Session数据的存储路径。 4. **session.name**: 设置Session的名称。 5. **session.use_cookies**: 是否使用Cookie...

    Session有效期问题——PHP沉思录之五.pdf

    要解决这个问题,需要在代码中判断当前Session的生存时间,如果超出了gc maxlifetime,就清空当前Session。或者,可以提高`session.gc_probability`和`session.gc_divisor`的值,以增加GC的可能性。 另外,PHP的...

    SESSION高级用法

    比如,如果设置 `session.gc_probability = 1` 和 `session.gc_divisor = 100`,则每 100 次 `session_start()` 调用中有 1 次会触发垃圾回收。 - **session.gc_maxlifetime**:设置 Session 数据的有效时间(秒),...

    php中精确控制session超时时间

    4. **调整`session.gc_probability`和`session.gc_divisor`**:这两个配置项用于控制垃圾回收(GC)的概率。增大`gc_probability`或减少`gc_divisor`可以提高GC运行的频率,从而更快地清理过期session。然而,频繁的...

    详解php设置session(过期、失效、有效期)

    3. `session.gc_maxlifetime` 也设置为一个大值,如99999999,确保服务器端Session数据长时间保存。 如果无法直接修改`php.ini`,也可以通过程序逻辑来实现Session永不过期。一种方法是使用Cookie来持久化Session ...

    PHP Session的配置与应用

    例如,可以设置`session.save_path`来指定Session数据的存储路径,`session.cookie_lifetime`来设定Cookie的生命周期,`session.gc_maxlifetime`来设定Session数据在服务器上的存活时间等。 3. **自定义Session处理...

    PHP5 session 详解

    - **设置适当的 Session 过期时间**:通过 `ini_set('session.gc_maxlifetime', 1440)` 来设置 Session 的最大生存时间。 #### 五、总结 Session 是 PHP 中非常重要的一个功能,它能够帮助开发者在多次请求之间...

    PHP实现多服务器session共享之memcache共享.rar

    3. **session管理**:由于memcache本身不处理session过期和清理,所以需要在PHP代码中设定合适的session生命周期(`session.cookie_lifetime`和`session.gc_maxlifetime`)以及定期清理策略。 4. **处理并发问题**...

    关于session在PHP5的配置文件中的详细设置参数说明

    9. **session.gc_probability** 和 **session.gc_divisor**:这两个参数一起控制Session的垃圾收集机制。gc_probability是发生垃圾收集的概率,gc_divisor是概率发生的基数。默认情况下,1/1000的概率进行垃圾收集。...

    PHP程序设计-3期(KC016) 3.12.1 session课后习题.doc

    - **session**:由服务器控制,通过`session.gc_maxlifetime`配置项设置,默认24分钟。如果用户关闭浏览器,session通常会结束,除非服务器有额外机制保持session活跃。 - **cookie**:由开发者定义,可以设置过期...

    PHP程序设计-3期(KC016) 3.12.1开始session常见问题.docx

    你可以通过`session.gc_maxlifetime`设置session过期时间(单位为秒)。例如,设置为30分钟: ```ini session.gc_maxlifetime = 1800 ``` ### 总结 正确理解和使用PHP中的session是构建动态、交互式Web应用的基础...

    php清除session

    调整`session.gc_probability`和`session.gc_divisor`配置可改变这一概率。 4. **Server配置**:不同的服务器环境可能有不同的配置,比如Apache与Nginx,它们对session的处理方式可能有差异。确保服务器配置与PHP...

    session与cookie

    `session.gc_probability`和`session.gc_divisor`决定何时清理过期Session。 5. **生命周期**:Session数据的生命周期可以通过`session_set_cookie_params()`或`ini_set()`函数设置。当Session过期,服务器会自动...

    php 如何设置一个严格控制过期时间的session

    1.php session 有效期 PHP的session有效期默认是1440秒(24分钟),如果客户端超过24分钟没有刷新,当前session会被回收,失效。 当用户关闭浏览器,会话结束,session也会...2.session.gc_maxlifetime,session.gc_prob

Global site tag (gtag.js) - Google Analytics