さて、1週間ぶりにこのシリーズ再開。
#正月の間に下書きしておいた記事ストックがなくなったから、というのはここだけの話w。今後は週1くらいのペースを目標に続けていきます。。
ということで今回は、ログインをしてセッション管理が必要なサイトを作るときの話です。
携帯サイトではCookieが使えない。
大きく立ちはだかるのが、Cookie使えない壁です。imode端末のすべてとソフトバンクの一部機種(C型・P型)がCookieに対応していません。auはOKなんだけどね。
なのでCookieが使えないなら、urlパラメタにセッションキーをいれてずっと引き継いでいくことになります。
PHPの機能
php.iniの設定で操作できることに、次の2つがあります。
session.use_cookiesによりクライアント側にセッションIDを保存する際にクッキーを使用するかどうかを指定します。デフォルトは1(有効)です。
このオプションを0(無効)にすると、クッキーではなくurlパラメタで、セッションキーを引き回せるようになります。もうすこし厳密に言うと、urlパラメタに PHPSESSID=xxxxxx があると、このセッションキーからひもづいてwwwサーバ側に保存されているセッション変数群に $_SESSION[] でアクセスできるよう、PHP言語側で処理してくれるようになります。
session.use_trans_sidは、透過的なセッションIDの付加をするかどうかを指定します。デフォルトは、0(無効)です。
これ、くわしい挙動を確認してみたところ、こんな動きをしてくれます。
phpファイル中に書かれているすべての<a href="hoge">の記述について、(<a>タグだけでなく<form>なども処理対象です)
- urlが絶対パスの場合 → なにもしない
- urlが相対パスの場合 → 自動的にurl末尾に「?PHPSESSID=xxxxxx」を付加してくれる。(ほかにパラメタがすでに記述されている場合は?ではなく&でつなげられます)
なかなか便利そうーと最初は思ったんですが、いざ使ってみるとなかなか扱いが面倒になるケースがあるので、私はこのオプションは利用しない派。代わりにSmartyの修正子で似たような処理を作る方向でも対応可能かと。
(そのほか、関連項目にsession.use_only_cookiesとかurl_rewriter.tagsとかがありますので興味のある方はどうぞ。)
で、これらのphp.iniの設定項目は、コード中でphp_ini()関数で動的に変更できるので、UAなどを見てCookie非対応機種からアクセスされたときはこれらのオプションを変更する、という手が取れます。
セッションパラメタ名
上記で PHPSESSID と記述しているセッションパラメタ名ですが、これはデフォルト設定で、session_name()関数で自由に設定できます。デフォルトだとカッコわるいwので適宜変えちゃいましょう。
その際の注意ポイントですが、
- docomoで、urlの文字長は最大512バイトまで。
なのでなるべく短いのにしましょう。 - Softbankで、公式サイト以外では使ってはいけないパラメタ名というのが定められていて、「sid」「uid」とかのベタなやつは使っちゃダメってことになっています。(詳しくはソフトバンク公式技術サイト「HTML編」のP.51あたり)
長くなってきたので後編に続く。







