いまさらながらなんですが、指定時間経過後自動でログアウトさせる方法について説明します。
アクセスが無くなってから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'));
}
}