CakePHP でハートビート
投稿者 aoki 2008 年 11 月 9 日 – 12:03 PM -「登録フォームで、せっかく入力したデータが消えてしまった。」 という状況(セッション切れ)に問題を抱えたことはありませんか?
これに対して、IPAのサイトで安全にセッションを延長する方法で「ハートビート」という技法があるのを知りました。
http://www.ipa.go.jp/security/awareness/vendor/programming/a05_03_main.html
上記ではフレームを利用してハートビートしているのですが、
これならAjaxで実装できると思い、下記のようなプログラムを行いました。
セッションが切れる15秒前にハートビートをAjaxで呼び出します。
ますは、エレメントを作成
/views/elements/h_beat.thtml
PHP:
-
<?php
-
-
//セッションが切れる15秒前に呼び出す。
-
$limit =15;
-
switch (Configure::read('Security.level')) {
-
case "high":
-
$frequency = ( Configure::read('Session.timeout') * 10 ) - $limit;
-
break;
-
case "medium":
-
$frequency = ( Configure::read('Session.timeout') * 100 ) - $limit;
-
break;
-
case "low":
-
$frequency = ( Configure::read('Session.timeout') * 300 ) - $limit;
-
break;
-
}
-
-
"url"=>"/contents/heart_beat/",
-
"update"=>"heartBeat",
-
"frequency"=>$frequency
-
);
-
?>
エレメントをレイアウトから呼び出します。
/views/layout/default.thtml
PHP:
※prototype.js が必要です。
Ajax呼び出し先 URLのコントローラを設定します。
今回は(/contents/heartBeat/)とします。
/controllers/contents_controller.php
PHP:
-
...
-
//ヘルパーにAjaxを指定
-
...
-
アクションを設定
-
function heartBeat(){
-
$this->layout=null;
-
//セッションID更新、古いセッション削除
-
$this->Session->renew();
-
}
-
...
上記アクションに対するビューを設定
/views/contents/heart_beat.thtml
ファイルの中は空のままでOK。
Tags: cakephp, Heart Beat
カテゴリー: PHP | トラックバックURL
