2008年02月18日
CakePHP 携帯向けページでセッション
昨日に引き続き、CakePHPネタです。
某社の端末ではCookieが扱えないので、ログイン状態などをSessionで持ちまわすには、SessionIDをPOSTなりGETなりで渡してやらないといけないのですね。
で、
CakePHP に use_trans_sid 風の処理を組み込む - hetimaの日記
http://d.hatena.ne.jp/hetima/20070201/1170313526
↑を参考にゴニョゴニョ。
ただ、MobileAppControllerを作って個別に継承させるのもなんだかなーということで、以下のようにしてみます。
1. 携帯でアクセスされたらwebservices='mobile'ってしちゃう。
2. _initComponentsでセッションの定義を変更しちゃう。
1の携帯でアクセスされたら webservices=mobileは、
CakePHP 携帯用ビューを表示する | Shin x blog
http://www.1x1.jp/blog/2006/09/cakephp_mobile.html
↑を参考に。
adminルーティングまで含めるなら、↓な感じでしょうか。
# あと、UserAgetも判別して分岐するようにしておきます。
2なのですが、hetimaさんの記事のように__constructメソッドに書くと、
controllerの各変数が初期化されていないため、
ので、同様の内容を、AppControllerの_initComponentsメソッドに書いてやります。
# if ($this->webservies == 'mobile') でくくるだけなんですけどね。
これで、少し幸せになるかもしれません。
ついでに、↓のRedirectメソッドの話も参考になりましたので紹介。
携帯対応 COOKIEを使わないSESSIONの使い方。 - 個人事業主のつぶやき
http://d.hatena.ne.jp/toshiyuki_saito/20071006/1191633106
某社の端末ではCookieが扱えないので、ログイン状態などをSessionで持ちまわすには、SessionIDをPOSTなりGETなりで渡してやらないといけないのですね。
で、
CakePHP に use_trans_sid 風の処理を組み込む - hetimaの日記
http://d.hatena.ne.jp/hetima/20070201/1170313526
↑を参考にゴニョゴニョ。
ただ、MobileAppControllerを作って個別に継承させるのもなんだかなーということで、以下のようにしてみます。
1. 携帯でアクセスされたらwebservices='mobile'ってしちゃう。
2. _initComponentsでセッションの定義を変更しちゃう。
1の携帯でアクセスされたら webservices=mobileは、
CakePHP 携帯用ビューを表示する | Shin x blog
http://www.1x1.jp/blog/2006/09/cakephp_mobile.html
↑を参考に。
adminルーティングまで含めるなら、↓な感じでしょうか。
# あと、UserAgetも判別して分岐するようにしておきます。
$Route->connect('/m/admin/:controller/:action/*', array('webservices' => 'mobile', 'admin'=>true));
$Route->connect('/m/:controller/:action/*', array('webservices' => 'mobile'));
2なのですが、hetimaさんの記事のように__constructメソッドに書くと、
controllerの各変数が初期化されていないため、
$this->webservices
の値が参照できません。ので、同様の内容を、AppControllerの_initComponentsメソッドに書いてやります。
# if ($this->webservies == 'mobile') でくくるだけなんですけどね。
class AppController extends Controller {
var $_needs_session_renew=false; //for Session Fixation
function _initComponents() {
if ($this->webservies == 'mobile') { // 携帯モードかチェック
if (isset($_POST[MY_SESSION_POST_NAME])) $sid = $_POST[MY_SESSION_POST_NAME];
else if (isset($_GET[MY_SESSION_POST_NAME])) $sid = $_GET[MY_SESSION_POST_NAME];
else $sid = null;
if( preg_match('/^[0-9a-f]{32}$/', $sid) ){
session_id($sid);
$this->_needs_session_renew = true; //for Session Fixation
}
define('MY_CAKE_NO_COOKIE', 1);
}
parent::__initComponents();
}
// 他の処理 ゴニョゴニョ
}
これで、少し幸せになるかもしれません。
ついでに、↓のRedirectメソッドの話も参考になりましたので紹介。
携帯対応 COOKIEを使わないSESSIONの使い方。 - 個人事業主のつぶやき
http://d.hatena.ne.jp/toshiyuki_saito/20071006/1191633106
Posted by noji at 20:26 | Comments(0) | アレ系
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。