週1ペースで書く、なんて宣言しておきながら2ヶ月以上ほったらかしにしているこのシリーズですが、、、しれっと続きをいきましょう。
前回の続きで、クッキーが使えない携帯端末向けのサイトでセッション管理をするときの話、です。
定数SID
セッションIDを url に埋め込むのに、php.ini 設定の session.use_cookies を操作するのではなく、自力でphpで処理を書く場合。定数 SID というのが使えます。
この定数、自分も最近まで存在を知らなかったんですが、PHPリファレンスサイトのなかの http://jp2.php.net/manual/ja/ref.session.php#session.idpassing や、同じページのなかの「定義済み定数」の欄に説明が書いてあります。
セッションが開始している場合に定義されている定数 SID を使用することもできます。クライアントが適当な セッションクッキーを送信しなかった場合、この定数は session_name=session_id の形式となります。 他方、送信された場合には、この定数は空の文字列に展開されます。 このため、この定数を無条件に URL に埋め込むことができます。
ということで、url にセッションIDを付加する処理を自分で書く場合は、このSID定数を見て、 ? なり & なりで url の後ろにつなげるのが良いです。
あ、かるくハマっことあるのは url の中に「#hoge」っていうアンカーが含まれている場合。この場合は末尾に付加するとアンカーテキストの一部と見なされてしまうので、# の前に付加するようにしましょう。
セッションの有効期限の管理
セッションの有効期限を、「ブラウザ閉じるまで」のセッションクッキーではなく、時間指定で期限設定したい場合の話。
cookieでセッション管理する場合は、cookie自身に有効期限を設定できるのでこれで管理すればOKなのですが、urlパラメタで管理する場合、このクッキー有効期限のしくみは利用できません。
ので別の手段で期限管理をする必要があるわけですが、自分が思いついたのは、セッション変数としてパラメタ管理する方法。有効期限の値をセッション変数のなかで保持するようにすれば、この問題は回避OKです。
mod_rewriteリライトルール
これはちょっとレアケースだと思いますが、、mod_rewriteでurlのリライトを行っている場合の話。
RewriteRuleの記述で、クエリストリングを引き継がない設定になっている場合、すなわり「QSA」オプションの記述がない場合は、せっかくurlに付加したセッションIDがリライトしたときに消えてしまってなぜかセッションが切れる、ということでハマったことがありました。
セッション管理の話はもう1回だけ続く予定です。ここまでphp全般の話題をしてきましたが、次回はethnaと関わる話をしようかなと。。。→書きました
過去のシリーズ記事
- 【php&ethnaで携帯サイトを作る】序章
- 【php&ethnaで携帯サイトを作る】ケータイサイト開発のおさらい
- 【php&ethnaで携帯サイトを作る】文字コード変換処理
- 【php&ethnaで携帯サイトを作る】セッション管理(前編)








コメント (2)
http://web-tan.forum.impressrd.jp/e/2008/03/27/2816
katy載ってますね!頑張って下さい><
Posted by: 通りすがり | 2008年3月28日 04:29
日時: : 2008年3月28日 04:29
>通りすがりさん
コメントありがとうございます!調査結果にkatyが入っているのはとても光栄です。が、これを見るとまだまだ努力の余地を見せつけられますね。ガンバりますよー。
Posted by: hirashima | 2008年3月28日 08:32
日時: : 2008年3月28日 08:32