几乎。文件(会话)不会立即删除,由 session.gc_probability 和 session.gc_divisor 决定。
不,会话将过期,但会话文件的删除如前所述确定
这通常是正确的,但如果您要实现自己的会话处理程序,即使忽略 session.gc_maxlifetime 也可以更改会话到期的行为
在 db 中存储会话不应更改这些规则,但如果您愿意,可以稍微延长它们。
编辑:
这大致就是你如何注册自己的会话处理程序(处理程序是一个类)然后用它做任何你想做的事情
首先,假设我们有一个类,它将为我们的应用程序处理会话。
class MySession {
function open($save_path, $session_name) {
}
function close() {
}
function read($id) {
}
function write($id, $sess_data) {
}
function destroy($id) {
}
function gc($maxlifetime) {
}
}
要在php中注册handler,只需要调用session_set_save_handler函数,在我们的例子中是这样的:
// register the session handler
$sess = new MySession();
session_set_save_handler(array($sess, 'open'),
array($sess, 'close'),
array($sess, 'read'),
array($sess, 'write'),
array($sess, 'destroy'),
array($sess, 'gc'));
请注意,实际上有更好的方法来注册处理程序本身,您甚至可以在类的构造函数中执行此操作,或者以许多其他方式。但我认为这不是重点。
重要的是,尽管 PHP 为您提供了与其会话管理机制的标准行为相对应的所需变量,但您不必尊重它(我不建议这样做)。
要回答下面的评论,忽略 maxlifetime 参数,您可以在 gc 方法中忽略它并使用您认为必要/正确的任何内容,例如(使用 db 伪代码):
function gc($maxlifetime) {
$sql = "DELETE * FROM MySession WHERE lastAccess < NOW()-3600";
// execute the query, say I have PDO instance in $dbh variable
$dbh->execute($sql);
}
瞧,您自己完全绕过了 PHP 会话设置。