プログラマ必見!!HTML,CSS,C,JAVA,Struts,ときどきSQLServer

  YOWANAKIのナビゲーター   トップページ > スポンサー広告> PHP > CakePHP ブラウザ閉じたときセッション開放する方法  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CakePHP ブラウザ閉じたときセッション開放する方法

2011 - 07/14 [Thu] - 17:30

CakePHPではブラウザを閉じたときにセッションを消すことができる


方法その1
core.phpのSecurity.levelをhighにする
フォルダ:プロジェクト名/app/config/core.php
変更前→Configure::write('Security.level', 'medium');
変更後→Configure::write('Security.level', 'high');
~補足説明~
Security.levelには'high','medium','low'の3種類あり
high → 有効期限0(ブラウザを閉じるまで)、リクエストごとに作成される
medium → 7日間
low → 25年間
という特徴がある(上記はセッションクッキーの有効期限なのでタイムアウトは別に設定する)
問題点:highに設定すればブラウザを閉じたときセッションも消すことができるが、
リクエストごとにも作成しなおすため、ボタン連打などを行うとセッション切れが起きる


方法その2
設定ファイルを作成する。
フォルダ:プロジェクト名/cake/libs/cake_session.php をコピーし
プロジェクト名/app/config に貼り付ける
名前を"cake_session.php"から"my_session.php"に変更する
my_session.phpを開き、class名を"MySession"に変更し、case 'cake'のスイッチ文を探す(488行目)

case 'cake':
if (empty($_SESSION)) {
if ($iniSet) {
ini_set('session.use_trans_sid', 0);
ini_set('url_rewriter.tags', '');
ini_set('session.serialize_handler', 'php');
ini_set('session.use_cookies', 1);
ini_set('session.name', Configure::read('Session.cookie'));
ini_set('session.cookie_lifetime', $this->cookieLifeTime);
ini_set('session.cookie_path', $this->path);
ini_set('session.auto_start', 0);
ini_set('session.save_path', TMP . 'sessions');
}
}
break;

変更前→ini_set('session.cookie_lifetime', $this->cookieLifeTime);
変更後→ini_set('session.cookie_lifetime', 0);
と変更する。

フォルダ:プロジェクト名/app/config/core.php
変更前→Configure::write('Session.save', 'php');
変更後→Configure::write('Session.save', 'my_session');

~追記~
問題点:destroy()を使ったときにエラーが発生する。
上の問題を解決できない場合は下記の方法で解決する。
フォルダ:プロジェクト名/cake/libs/controller/components/session.phpをコピーし
プロジェクト名/app/controllers/componentsに貼り付ける
session.phpを開き読み込みファイルを"require LIBS . 'cake_session.php';"から"require 'app/libs/cake_session.php';"に修正
フォルダ:プロジェクト名/cake/libs/cake_session.phpをコピーし
プロジェクト名/app/libsに貼り付ける
cake_session.phpを開きfunction __initSession() {を探す(472行目)
スイッチ文 switch (Configure::read('Session.save')) { 中にある
"ini_set('session.cookie_lifetime', $this->cookieLifeTime);"を全て
"ini_set('session.cookie_lifetime', 0);"に変更する
これで問題は解決する

スポンサーサイト

コメントの投稿





管理者にだけ表示を許可する

トラックバック

http://pilaf1028.blog27.fc2.com/tb.php/4-55cc89a4

 | HOME | 

FC2カウンター

検索フォーム

RSSリンクの表示

リンク

QRコード

QR

ブロとも申請フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。