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も判別して分岐するようにしておきます。


$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



同じカテゴリー(アレ系)の記事画像
広告枠がくっつき過ぎてイヤンな人へ('-'*
同じカテゴリー(アレ系)の記事
 CakePHP php4でのクエリー系のあれこれ。 (2008-02-17 16:00)
 M$とY!の合体 (2008-02-02 13:17)
 MT3.21 パッチ (2008-01-16 10:02)
 StrictなDoctypeでtarget (2008-01-12 18:42)
 Excel用CSVを作る。 (2007-12-24 12:41)
 広告枠がくっつき過ぎてイヤンな人へ('-'* (2007-12-11 10:28)

Posted by noji at 20:26 | Comments(0) | アレ系
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。