携帯でuse_trans_sidを使ったセッションの扱い 前編

By nakayama - 08/11/06 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

今回は携帯でセッションを扱う方法を紹介します。

一般的にPHPファイルの画面間でセッションIDを受け渡しする方法は2つあります。

1.ブラウザのCokkie機能を使う
2.URLにセッションIDを付与して受け渡し

※PHPのコンパイル時にオプションとして「–enable-trans-sid」を指定する必要があります

通常の設定ではセッションを使う場合、ブラウザのクッキー機能を使用するのですが、
携帯の端末ではクッキー機能を使用する事が出来ない機種があります。
※AU、SOftbankではほぼ使用出来るのですがdocomoではCokkieが使用出来ません。

その為携帯では「URLにセッションIDを付与」する方法が使われます。

URLでセッションIDを受け渡す設定の場合は
リンクの後ろにPHPSESSID の変数が自動的に付きます。

<a href="index.php?PHPSESSID=afbaea7b9b5d5b2e06a108307eaa5ee3">ホゲホゲ</a>

フォームの場合は

<input name="PHPSESSID" size="20" type="hidden" value="afbaea7b9b5d5b2e06a108307eaa5ee3" />

※URLを絶対パスで記入するとセッションIDは付かないでコーディングする時は注意が必要です。

使用方法はPHPのuse_trans_sidの設定を「on」にすれば可能です。
設定する方法は複数あります。以下4つの方法を紹介します。

1. .htaccess に記載

php_flag session.use_only_cookies Off
php_flag session.use_trans_sid On

2. php.ini に記載

session.use_only_cookies= 0
session.use_trans_sid = 1

3. PHPプログラムに記載

ini_set('use_only_cookies' , '0');
ini_set('session.use_trans_sid', '1');
//session_startの前に実行
session_start();

4. Zend_Session で設定

ちなみにZend FrameworkでZend_Sessionを使った場合は以下のような書き方になります。

$sessionConfig = array(
    'use_only_cookies' => 'off',
    'use_trans_sid'    => '1',
);
$session = Zend_Session::setOptions($sessionConfig);

これでURLにセッションIDを付与して受け渡すせるようになりました。


但し、この方法は問題点が2点あります。

1.PHPファイル間でしかセッションを維持出来ない

PHPファイル間でしかセッションは維持出来ませんので
ログインした状態を保持してサイト内を動き回れる仕組みの場合は
全ページPHPで作る必要があります。

2.セッションハイジャックの危険性が増す

セッションハイジャックの対応策については後編で紹介します。