用户会话将持续到期

时间:2012-03-28 20:56:59

标签: php session ini

我有一个上传表单,用户需要大约30分钟。去完成。他们在这个页面上闲置的整个时间。我使用ini_set()函数。您可以在此处查看上传页面的顶部:

    <?php

        session_start();
        ini_set('session.gc_maxlifetime',10080);

    ?>

如果用户闲置30分钟或更长时间,会发生什么。数据被截断,User_id被记录为NULL值。我完全不知道这是怎么回事。我最初在php.ini中设置了maxlifetime,但是重载了缓存的会话数据。所以,我只是使用ini_set。为什么数据会搞砸,而user_id不会被记录下来。注意:如果您足够快地填写表单,则没有问题。

3 个答案:

答案 0 :(得分:3)

您应该在ini_set()之前使用session_start()

答案 1 :(得分:2)

那是因为还有另一个调用session.gc_maxlifetime值为30分钟的脚本。所以其他脚本的会话垃圾收集器会清除不合时宜的会话(从他们的角度来看,会话超时)。

解决方案:您需要在session.gc_maxlifetimephp.ini中更改.htaccess的全局值,或在每个脚本。

答案 2 :(得分:1)

  1. 使用session.gc_maxlifetime设置ini_set并不一定会影响服务器清除会话的方式。 例如,在 Debian (并且,我想象在其他一些系统上),会话被cron作业清除,该作业不受脚本内部任何配置的影响(它只读取全局php.ini设置)。 如果是这种情况,您可以在php.ini中增加此服务器范围。

  2. 您可以覆盖session save handler,然后自行处理会话过期...

  3. 你可以使用一些ajax keepalive调用,这样即使用户在该表单页面上空闲,也会在到期时间内与服务器“交谈”,以保持会话活着