5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

アクセスが無くなってから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'));
    }
}
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?