最近は「携帯サイト」と聞くと携帯SNSサイト、着うたサイト、懸賞サイトなどいろいろなサイトが思い浮かびます。その他にもまだまだ携帯サイトはたくさんあります。今回は携帯サイトでセッションを使用したときに、実際に起こった意外な落とし穴について紹介します。

最近の携帯は高機能で高性能なのであまり気にしないでPCサイトと同じようにセッションを使用して作成できます。一世代前の携帯(第二世代携帯電話)などを対応したサイトの場合はPOSTでの通信ができない機種が多数あるので、 GETでセッションの値を引き継ぎながら、セッションを維持しないとセッションを使用できない場合があります。
例)
http://www.sampleurl.com/index.php?PHPSESSID=1ajbpqj41r2mk8354corm0cep1

今回は過去に作成した上記のようなサイトで問題が起こりました。

Au端末のWIN型携帯でセッション値をGETで送り、情報を引き継いだ場合にセッションがうまく保持できずに、セッションが切れてしまう現象が起こりました。毎回、必ず起こる現象ではなく、たまにセッションが維持できなくなるという問題でした。

問題が起こる原因を特定しにくいのですが、 Auの携帯はCookieを保持できる機種が多いので、これとセッションの関係が原因ではないかとおもっています。まだ現象としては起こっていませんが、 Au端末に限らずCookieを保持できる携帯では上記の現象が起こる可能性もありそうです。

そこでこの上記現象を解決する方法として、

session.use_cookies:

セッション ID を保持するのに、クッキーを利用するかどうかを指定します。デフォルトは On です。

上記の値を動的に変更してあげることで対応しました。

以下はプログラムでの簡単な設定例になります。

<?php
//mobileCheck()  モバイルチェックをするユーザー定義の関数です。(中身省略
if(mobileCheck()) {
//携帯からのアクセスの場合
    //セッションはGET値で渡す(Cookieは使用しない
    
ini_set('session.use_cookies'0);

}else{
//PCサイトのアクセスの場合
    //セッション使用の際はCookieを使用する
    
ini_set('session.use_cookies'1);
}
?>

上記は携帯サイトとPCサイトが混在している場合の設定例です。サイトの用途が携帯サイトのみの場合では、php.iniの設定を直接編集するとプログラムで操作する必要はなくなります。

また、この設定は「Session Fixation(セッション固定)攻撃」の可能性がありますので、セッションに保存する内容に十分注意した上での使用を心がけましょう。