【PHPで作る】初めての携帯サイト構築

第5回携帯サイトでセッションを取り扱う

携帯サイトでのセッション管理

今回は携帯で会員サイトを作る時のベースとなるログイン状態の管理方法を見ていきたいと思います。セッションとはユーザーがサーバーに接続し、サイトを巡回している間アクセスしてきているのが同一利用者であることを認識するための仕組みです。この仕組みを利用することで、一度会員ログインが完了した利用者がサイトにアクセス中、継続的に自分だけの情報を見るといったことが実現可能になります。

図1 セッションの仕組み
図1 セッションの仕組み

セッションを維持するためには、セッションIDを利用します。通常セッション管理はアクセスしてきた端末に対してセッションIDを割り振り、ブラウザに対して割り振られたセッションIDを渡します。サイト側はそのセッションIDに紐付いた情報を保持しておき、アクセスしてきたブラウザのセッションIDを元に情報を引き出すといった仕組みになっています。

ブラウザがセッション管理を行う方法には大きく2種類あります。

  • Cookieに保存する
  • URLに付与する

Cookieを利用する方法は、ブラウザの一時的な情報保存領域にセッションIDを保持して、ユーザーには見えない状態でセッションIDのやりとりを行う方法です。URLに付与する方法は、ユーザーに見えるURLのパラメータとしてセッションIDをやり取りする方法になります。

セッションIDは視認できてしまうとセキュリティ上問題があるため、PCのWeb上では一般的にCookieを利用してセッションを管理しています。そのため携帯サイトでもCookieを使ったセッション管理を行いたいところですが、各キャリアの対応状況は次のようになっております。

各キャリアのCookieの対応状況
キャリア Cookie対応状況
docomo

Cookieが利用できない

au

Cookie利用可能
※端末ではなくサーバー側での保存となる
※SSL通信時は端末での保存となる

SoftBank

C型、P型はCookieが利用できない
W型、3GC型はCookieが利用可能

表からわかるようにdocomoが一切Cookieに対応していないこともあり、携帯ではCookieを前提としたセッション管理ができない状態になっています。そのため携帯では基本的にURLに付与するセッションIDで管理していく方法を利用する形になります。

セッションIDを付与する

セッションIDをURLに付与する方法は、phpの設定を触るだけで簡単に切り替えることができます。設定方法は次の通りです。

php.iniの設定
ini_set('session.use_cookies', 0);
ini_set('session.use_only_cookies', 0);
ini_set('session.use_trans_sid', 1);

「session.use_cookies」はセッションIDの管理にCookieを利用するかどうかの設定です。ここではCookieを利用しないので「0」を設定します。⁠session.use_only_cookies」はセッションIDの保存をCookieのみで行うかどうかの設定になります。Cookieを利用せず管理したいので「0」を設定します。⁠session.use_trans_sid」はURLに自動的にセッションIDを埋め込むかどうかの設定になります。利用するので「1」に設定します。

これでCookieを使わずにURLにセッションIDを付与する状態になりました。ただし先ほど述べたとおり、URLにセッションIDが付与されている状態はセキュリティ上問題があります。ほかのユーザーになりすまされる可能性もあるので、利用するケースをdocomoだけにするなど必要最小限にとどめ、セキュリティに対して十分に理解して利用する必要があります。

次項ではセッションはもちろん「かんたんログイン」の仕組みにも利用することができる「個体識別情報」について見ていきましょう。

個体識別情報を理解する

個体識別情報とは各携帯端末に割り振られた一意な情報です。PCでのWebの場合はアクセス元のIPアドレスなどを使ってアクセス端末を識別しますが、携帯サイトの場合アクセス元のIPアドレスでは各端末を識別することができません。その代わりに利用できるのが個体識別情報です。個体識別情報はキャリアそれぞれごとに存在し、1キャリアに対しても1つだけではなくいくつか存在します。

各キャリアの個体識別情報
キャリア 個体識別情報
docomo
  • ユーザーID(UID)
  • FOMA端末製造番号
  • FOMAカード製造番号(UIM)
  • 端末製造番号
  • iモードID
au
  • EZ番号(サブスクライバID)
SoftBank
  • 端末シリアル番号
  • ユーザーID(UID)

個体識別情報はその情報により、大きく2つに分類されます。⁠携帯端末番号」「携帯契約番号」です。⁠携帯端末番号」は端末1台1台に割り振られた番号で、機種変更などで端末を変更した場合番号が変わってしまいます。しかし「携帯契約番号」は回線やサービスの契約ごとに割り振られた番号であり、3G端末の場合携帯内部にあるSIMカードなどに紐付いて番号が管理されています。そのため同一キャリア内で機種変更をしても番号が変わることがなく、引き続き同じ情報を利用できるのが特徴です。そのためサイトを継続して続けていく場合は「携帯契約番号」を使って携帯端末を識別していくとよいでしょう。

「携帯契約番号」に該当するものは、docomoの場合は「ユーザーID(UID⁠⁠FOMAカード製造番号(UIM⁠⁠iモードID」になります。⁠ユーザーID(UID⁠⁠」は公式サイトのみに取得を許可された番号で、一般サイトでは利用することができません。そのため一般サイトの場合「FOMAカード製造番号(UIM⁠⁠iモードID」のどちらかを利用することになります。auの場合は「EZ番号(サブスクライバID⁠⁠」で、SoftBankの場合は「ユーザーID(UID⁠⁠」になります。

個体識別情報を取得する

では実際に「個体識別情報」を取得してみましょう。個体識別情報はNet_UserAgent_Mobileを利用することで簡単に取得することができます。方法は次の通りです。

個体識別情報を取得する
<?php

// PEAR::Net_UserAgent_Mobileライブラリ
require_once('Net/UserAgent/Mobile.php');

// Net_UserAgent_Mobileをインスタンス化する
$agent = Net_UserAgent_Mobile::singleton();

// キャリアをチェックする
if ($agent->isDoCoMo()) {

    if($agent->isFOMA) {
        // FOMA端末製造番号
        $imode_id = $agent->getCardID();
        // FOMA端末製造番号
        $foma_serial_num = $agent->getSerialNumber();
    } else {
        // 端末製造番号
        $docomo_serial_num = $agent->getSerialNumber();
    }
    
    // iモードID
    $imode_id = $agent->getUID();
    
} else if ($agent->isEZweb()) {

    // EZ番号(サブスクライバID)
    $ez_num = $agent->getUID();

} else if ($agent->isSoftBank()) {

    // 端末シリアル番号
    $softbannk_serial_num = $agent->getSerialNumber();        
    // ユーザーID(UID)
    $softbank_uid = $agent->getUID();
    
}

?>

auとSoftBankは特に意識せずに上記のプログラムで個体識別情報が取得できますが、docomoの場合、そのままでは個体識別情報を取得することができません。個体識別情報を取得したいHTMLに次のような記述をすることで情報を送出してくれるようになります。

FOMA端末製造番号/FOMAカード製造番号(UIM)
<a href="login.php" utn>
iモードID
<a href="login.php?guid=ON">

docomoの「FOMAカード製造番号(UIM⁠⁠」を取得する場合は、送出の際「携帯電話/FOMAカード(UIM)の製造番号を送信します。よろしいですか?」といったダイアログが毎回でます。そのためすべてのページで「FOMAカード製造番号(UIM⁠⁠」を使った認証を行っていると非常に煩わしい携帯サイトになってしまいます。ダイアログを出さずに個体識別情報を利用したい場合は「iモードID」を利用するとよいでしょう。URLのパラメータに「guid=ON」をつけるだけで送出確認なしに情報を取得できるようになります。ただし「iモードID」はSSL通信の際は取得できないので注意が必要です。

この「個体識別情報」を使うことで、携帯サイトによくある「かんたんログイン」を実装することができます。ただしこの個体識別情報もPCなどから偽装してアクセスすることが可能になっています。そのため実際に個体識別情報を使った会員ページなどを作成する際は、携帯からのIPでしかアクセスさせてないようにするなど、セキュリティに気をつける必要があります。


次回は作成した携帯サイトをテストする方法について見ていきたいと思います。

おすすめ記事

記事・ニュース一覧