PHP
Phalcon

ログインを指定時間後には必ず自動でログアウトさせるベストな方法

いまさらながらなんですが、指定時間経過後自動でログアウトさせる方法について説明します。

アクセスが無くなってから30分後に自動でログアウトさせたい

ッテ要望は必ずあると思います。
そんなとき単純にsessionのlifetimeを設定すればいいじゃないか。と思うかもしれません。

php
session_set_cookie_params

これって、確実に指定した時間でセッションが終了する、というものではありません。
lifetimeを管理しているのは、
GC(ガベージコレクション)です。
session_gcというものがありますが、これは、ある一定確率でゴミ掃除してくれるというものです。
つまり、ある確率でしかセッションは消えない、ということです。

ということは、セッションが消えないときもある、ということになりますね。

ということで、単純に自分で管理すればいいわけです。

Phalcon使いなので、Phalconで説明します。
ちなみに、ログインしたときから30分経過すると自動ログアウトの処理です。

GCで確率を必ず実行するようにするよりも、この処理のほうが確実で、デバッグしやすいですよね。

session_set
$this->session->set("created", new DateTime('now'));
ControllerBase.php
public function initialize() {

    /**
     * セッションの終了をチェックする
     */
    if ($this->session->has('created')) {
        $created = $this->session->get('created');
        if ($created < (new DateTime('now'))->modify('-30 minute')) {
            // 指定時間経過後
            $this->session->remove('created'); 
        }
        // 最終アクセスから経過後としたいなら以下を生かせばいい createedよりも別の名前がよいかも
        //$this->session->set("created", new DateTime('now'));
    }
}