Sunflat のブログ

ソフトウェア開発についての話題が多いかも

iモードID

3/31に、ドコモの利用者IDをサーバ側で知る新しい仕組み、iモードIDが導入された。
http://www.nttdocomo.co.jp/info/notice/page/080228_00.html
http://www.nttdocomo.co.jp/service/imode/make/content/ip/


従来でも、リンクタグ(a herf=)にutnと書いておくと、利用者IDが送信されたが、いちいち確認画面が出て使いづらかった。
iモードIDでは、いちいち確認画面が出ないので使いやすそう。(ユーザ側の設定で、送信しないようにすることは可能)


URLに"guid=ON"というクエリパラメータをつけてておくと、X_DCMGUIDというHTTPヘッダでIDが送信される。
たいした長さじゃないんだし、パラメータつけなくても送信してくれれば良いのに…、といった感じだが、何かセキュリティ上の都合でもあるんだろうか?


というわけで、早速サンフラットGAMESiモードID対応にしておいた。(ランキング用の名前をIDに関連付けて保存)

以下、PHPで"guid=ON"のパラメータをつける例。

  • get_url_for_imode_id($url)を呼び出せば、guid=ONが付加されたURLが返る
  • redirect_self_for_imode_id()を呼び出せば、現在のURLにguid=ONを付加してリダイレクトする
<?php
// Docomo判定
function is_docomo() {
    return strpos($_SERVER["HTTP_USER_AGENT"],"DoCoMo/")===0;
}

// 可能なら、i-mode ID を送信させるために、URLに"guid=ON"を付加
function get_url_for_imode_id($url) {
    if (is_docomo() && strpos($url,"guid=ON")===FALSE) {
        if (strpos($url,"?")===FALSE) {
            $url.="?guid=ON";
        }else{
            $url.="&guid=ON";
        }
    }
    return $url;
}

// 可能なら、i-mode IDを使わせるようにリダイレクト
function redirect_self_for_imode_id() {
    if (is_docomo() && !isset($_SERVER['HTTP_X_DCMGUID']) && !isset($_GET['guid']) ) {
        // 自分自身のURLを組み立て
        $url='http://'.$_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];
        if ($_SERVER['QUERY_STRING']) { $url.="?".$_SERVER['QUERY_STRING']; }
        //
        $newurl=get_url_for_imode_id($url);
        if ($newurl!=$url) {
            header('Location: '.$newurl);
            exit();
        }
    }
}
?>