Hatena::ブログ(Diary)

個人事業主のつぶやき

2007-10-06

[]携帯対応 COOKIEを使わないSESSIONの使い方。

あまり、セッション周りには詳しくないのでめちゃ苦労した。

まず、私が認識している携帯事情では、

Docomo系携帯の一部(?)はCOOKIEが使えない。

AUは(COOKIEを)まず問題なく使える。

ソフトバンクはしらん。


つまるところ、携帯に完全対応させるには、

COOKIEを使わないSESSION管理が必要になる。


やり方の問題かもしれないが、

session.use_trans_sidを1にするやり方は

cakeではうまくいかなかった。


Google先生に問い合わせたところ

CakePHP に use_trans_sid 風の処理を組み込む

があったのでこれを参考にさせてもらった。

(というよりはこれでできる)


詳細は、リンク先に頼るとして、

タスクはこうだ。

app/app_controller.phpにMobileAppControllerクラスを書く。

app/config/bootstrup.phpにMY_SESSION_POST_NAME定数を定義する

app/config/core.phpのCAKE_SESSION_SAVE定数を書き換える

app/config/CAKE_SESSION_SAVE定数.phpを作成し、なかみを書く。

携帯対応したいcontrollerのextendsをMobileAppControllerに変更する。

携帯対応したいviewにhiddenを追加する。

と、ここまでがリンク先に載っている。

が、これだけでは不十分。

まず、

Controller::redirectを呼び出すとセッションの引継ぎが出来ない。

そして、実はこのままリンク先の設定を全てしてもうまくいかない場合がある。


さて、追って対応していこう。

まず、redirect問題は下記条件の場合は無視してよい。

redirectを使っていない。

controllerが変わるときに、情報を破棄してもOKな場合。


ただ、SNS的なサイトだとこれは現実的では無いので、

ちょっと変更を加える。

cake/libs/controller/controller.php

redirectメソッドを書き換える。

redirectメソッドの中に

header('Location:' . $url);

があるので、

header('Location: ' . $url . "?" . MY_SESSION_POST_NAME . "=" . session_id());

と書き換える。

これだと、PCサイト側の処理も同じようにリダイレクトがかかり、

URLが見た目汚くなってしまうので、携帯からのアクセスじか見分けた方が良いかもしれない

がこれでも動くのでひとまずOKとする。


そして最後。これで丸1日潰したので、注意してほしい。

実はこのままリンク先の設定を全てしてもうまくいかない場合がある。の所だ。

ここまできてテストをしてみても、うまくいかない場合はほぼ確実にこれ。

原因は、app/app_controller.phpのMobileAppControllerクラスの処理だ。

コンストラクタでpreg_matchをしているが、

/^[0-9a-f]{32}$/

ようは32文字の16進数表記とある。

が、私の環境では、

mやらsやらが入った、

/^[0-9a-z]{32}$/

の文字列がセッションIDとして採用されていた。(もしかしてopenSUSE10.2だから?)


まぁ、そんなこんなで、fの部分をzに変えるだけでうまくいくはずだ。

session_idをよく見れは分かることだったのに、目にもつかずで丸一日。

灯台元暗しとはこのことか!と思った。

faminotefaminote 2007/11/06 22:32 、マ、ク、皃゛、キ、ニ。ェサイケヘ、ヒ、オ、サ、ニ、筅鬢テ、ニ、゛、ケ。」
、、、?、、、?サ?、キ、ニ、、、ソ、ホ、ヌ、ケ、ャ。「header(’Location:’ . $url);、ホイユス熙ヒ、ト、、、ニ、マ。「
cake/libs/controller/controller.php、?トセタワ、、、ク、?、隍熙マ。「
、ス、?、?キムセオ、キ、ニ、、、?app/app_controller.php、ヒ
function redirect、?・ウ・ヤ・レ、キ、ニ、ス、ウ、ヌハムケケ、キ、ソハ?、ャ。「
・ウ。シ・ノ、ホハムケケ、?app_controller.php、゛、ヌ、ヒホア、皃?、ウ、ネ、ャ、ヌ、ュ、ニ
ホノ、、、ホ、ヌ、マ、ハ、、、ォ、ネサラ、、、゛、キ、ソ、ャ。「、、、ォ、ャ、ヌ、キ、遉ヲ、ォ。」

faminotefaminote 2007/11/06 22:32 はじめまして!参考にさせてもらってます。
いろいろ試していたのですが、header(’Location:’ . $url);の箇所については、
cake/libs/controller/controller.phpを直接いじるよりは、
それを継承しているapp/app_controller.phpに
function redirectをコピペしてそこで変更した方が、
コードの変更をapp_controller.phpまでに留めることができて
良いのではないかと思いましたが、いかがでしょうか。

レシピレシピ 2008/05/11 09:39 session.use_trans_sidが上手くいかない件ですが、こちらに対応方法がありました。
http://www.jamboree.jp/cms/archives/62

toshiyuki_saitotoshiyuki_saito 2008/05/12 08:22 >レシピさん
Sessionクラスに設定を変えている箇所があったんですね。
情報ありがとうございます!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/toshiyuki_saito/20071006/1191633106