PHP:会话永不过期

Toy*_*dor 4 php apache ubuntu session session-timeout

昨晚我登录,第二天早上我仍然登录,即使我退出浏览器.我希望会话在几个小时后过期,我认为它可以用"session.gc_maxlifetime"设置为"1440","session.cache_expire"设置为"180"

这是我从PHP.ini中可以找到的内容

Session Support                 enabled
Registered save handlers        files user
Registered serializer handlers  php php_binary wddx


session.auto_start        Off
session.bug_compat_42     Off
session.bug_compat_warn   Off
session.cache_expire      180
session.cache_limiter     nocache
session.cookie_domain     no value
session.cookie_httponly   Off
session.cookie_lifetime   0
session.cookie_path       /
session.cookie_secure     Off
session.entropy_file      no value
session.entropy_length    0
session.gc_divisor        1000
session.gc_maxlifetime    1440
session.gc_probability    0
session.hash_bits_per_character  5
session.hash_function     0
session.name              PHPSESSID
session.referer_check     no value
session.save_handler      files
session.save_path         /var/lib/php5
session.serialize_handler php
session.use_cookies       On
session.use_only_cookies  On
session.use_trans_sid     0
Run Code Online (Sandbox Code Playgroud)

在我们的旧服务器上,我们使用相同的设置和会话.与旧版本的唯一区别是在旧服务器上设置为"memcache"的"session.save_handler"."session.save_path"也不同.

Max*_*Max 9

依靠其他东西并希望他们工作不是我的事.:DI认为最好的解决方案是自己实现会话超时.使用表示最后一次活动(即请求)的时间的简单时间戳,并使用每个请求更新它:

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // last request was more than 30 minutes ago
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
Run Code Online (Sandbox Code Playgroud)

使用每个请求更新会话数据也会更改会话文件的修改日期,以便垃圾收集器不会过早地删除会话.

〜Foorack