DoCoMoのiモードIDについて

DoCoMoが2008-03-31から、iモードID通知機能サービスを開始しました。
これで、勝手サイトでもutnの端末情報取得のダイアログを出すことなくユーザの一意のIDを他キャリア同様に取得できるようになります。


参考
重要なお知らせ : 『iモードID』の提供開始について | NTTドコモ
開発者向け情報 | サービス・機能 | NTTドコモ


ke-tai.orgでもさっそくエントリがあがっていました。
本日提供が開始された「iモードID」機能を早速試してみました | ke-tai.org - インフィニットループ


phpの場合は次のような変数から取得することが出来ます。

var_dump($_SERVER['HTTP_X_DCMGUID']);
var_dump(getenv('HTTP_X_DCMGUID'));

$_SERVERはiniの設定に依存するのでgetenvの方でも取れます。

注意点

■パラメータの大文字小文字は区別しない
引数のパラメータの大文字小文字は区別しないようですが、値は「on」固定のようです

<a href="xxxx?guid=on">guid=on</a><br>
<a href="xxxx?GUID=ON">GUID=ON</a><br>
<a href="xxxx?guid=ON">guid=ON</a><br>


また、パラメータを完全マッチしているのかguidというパラメータが複数あったとして、guid=onがあればOKなようです。

<a href="xxxx?guid=off&guid=on">guid=off</a><br>


■formの場合
getのformでは、通常通りhiddenタグで持たせることで取得できます。

<form action="xxxx" method="get">
<input type="hidden" name="guid" value="ON">
<input type="submit" name="" value="submit">
</form>


postの場合には、hiddenタグで渡すことは出来ません。

POSTのBODY部については対象外

以下のようにする必要があります。

<form action="xxxx?guid=ON" method="post">
<input type="submit" name="" value="submit">
</form>


逆に、getでactionにつけた場合には、端末仕様によるかもしれませんが、手元のSO905iでは送ってきませんでした。

<form action="xxxx?guid=ON" method="get">
<input type="submit" name="" value="submit">
</form>

サーバ側で$_GETを取得しても入っていないので、formでgetの場合に、actionに指定したパラメータは無視される端末仕様なのかもしれません。


iモードID自体は大文字小文字区別する
iモードIDは、パラメータと違い、大文字小文字が区別されます。
そのため、DBに保存する場合には、データ型に注意する必要があります。
MySQLならば 「VARCHAR」ではなく、「VARCHAR BINARY」にする必要があります。


大文字小文字の区別をちゃんとしていないと、会員制サイトや、iモードIDで回数制限等する場合には、他人のページにログインできたりしてしまうので注意が必要です。(誤解を招きそうな文章だったので少し追記)


iモードIDの一意性について

一度、付与したiモードIDは再利用いたしません。

とのことですので、有効期限や重複の可能性は考えなくてよさそうです。
上記の大文字小文字の注意だけは必須ですね。


SSL領域について

SSL通信時は、iモードIDは付与できません。

これは予想通りですが、SSL領域では、iモードIDは送付してこないので、サイト遷移的に工夫をする必要があります。
おそらく、iモードIDが必要になるのが、会員登録や商品購入、ログイン処理などだと思いますが、そういったページでSSLは必須ですので、肝心なところで使えません。

SSL領域でiモードIDを取得し、それをセッションに格納してからSSLへ遷移し、SSL内ではセッションから取得という流れになるのではないかと思います。
SSL遷移中に非SSLに移動しiモードIDを取得という流れも考えられますが、端末側でSSL領域を抜けるメッセージが出たりするのでよくないかもしれません。


続き
iモードIDとutn(端末情報)との違い - maru.cc@はてな