去年8月に書いた「メモ:携帯電話端末からの認証」には書いていなかった分について追加したいと思います。
作ろうiモードコンテンツ:iモードセンタの各種情報 | サービス・機能 | NTTドコモ→iモードIDについて
いままでは、A要素またはFORM要素でutn属性をつけないとだめでした(参考)が(そして、Cookieも使えないので色々厄介だった)、リクエストURIにguid=ONをくっつけることで、端末固有情報を送信することが可能になりました。
拡張ヘッダ「X-DCMGUID」にのっかってきます。
というわけで、こういうふうに書けば取得できます。
$useragentstring = $_SERVER["HTTP_USER_AGENT"] ;
if ( ereg( "^DoCoMo/" , $useragentstring ) ) {
$client_ident = $_SERVER["HTTP_X_DCMGUID"] ;
}
ちなみに $_SERVER はHTTPサーバからの環境変数。→
参考
そして、なぜ「X-DCMGUID」が「HTTP_X_DCMGUID」になるかは、
CGI Environment Variablesを参照してください。
該当のところ引用すると、
In addition to these, the header lines received from the client, if any, are placed into the environment with the prefix HTTP_ followed by the header name. Any - characters in the header name are changed to _ characters.
つまり意訳するとこう。
これら(訳注:既定の環境変数)に加えて、クライアントから追加のリクエストヘッダがあった場合は、「HTTP_」で始まり、そのあとにヘッダ名称が続く環境変数が設定されます。ただし、ハイフン「-」はすべてアンダースコア「_」に置き換えられます。
なお、FORMでPOSTする場合、注意が必要です。
<?php
$useragentstring = $_SERVER["HTTP_USER_AGENT"] ;
if ( ereg( "^DoCoMo/" , $useragentstring ) ) {
// 以下、DoCoMoのときのみのコード
$login_to = "login.php?guid=ON" ;
} else {
// それ以外
$login_to = "login.php" ;
}
?>
<FORM action="<?php echo $login_to ; ?>" method="POST">
hidden要素で渡すのではなく、actionにずばりguid=ONと書かなければならないことに注意です。
動的にURIにguid=ONを追加したりしなきゃいけないとか、結構面倒ですけどね。
最近のコメント