uidがなぜ見えるのか考えてみた

Pocket

本来はuidは表示されないはずです
なのになぜ表示されるサイトがあるのか考えてみました

ITPro にも書いてありますが、ドコモのuid変換処理はドコモのゲートウェイで行います
ゲートウェイで変換されますので、
モバイルサイトにはuidが変換された状態でアクセスがあります

この状態ですと、携帯でURL表示してもuid=NULLGWDOCOMO のままです

どうしたらuidが見えるのでしょう?

携帯と一度のリクエストで複数回のやり取りがないとダメそうです
ドコモのゲートウェイがヘマしそうにないと思います

一度のアクセスで複数回のリクエストが発生すると言えばリダイレクトですね!

リダイレクトしたい時って古いページとかにアクセスされた時ですよね

携帯サイトだと、違うキャリアのページにアクセスされた時が考えられます

携帯サイトを見ていると、キャリア別ページに二つの方法があるのがわかります
一つ目は同じホスト名でiやeなどのキャリア別ディレクトリになっているパターン
二つ目はホスト名がキャリア別に分かれているパターンです

同じサーバーでリダイレクトした場合、apacheの内部リダイレクトになるかもしれません
そうなると、携帯とのリクエストが発生しないことが考えられます
となると、二つ目のパターンであるキャリア別にホスト名がわかれている方がuidが見えそうです

http://i.example.co.jp/ がドコモ携帯用のサイトだとします
auのURLであるhttp://e.example.co.jp/ にドコモ携帯でアクセスされたらリダイレクトします

mod_rewriteで書いてみます
uidが表示されるであろうルールです

RewriteEngine On

RewriteCond %{USER_AGENT} ^DoCoMo
RewriteRule (.*) http://i.example.co.jp$1 [R=302,L]

アクセスがあったものをそのままリダイレクトして渡します

正しくは下のような感じでしょうか
uidがあったらNULLGWDOCOMOにしなおす処理をしています
サンプルですが、ルールの実験はしてないので動作保証はしません(−−)

RewriteEngine On

RewriteCond %{USER_AGENT} ^DoCoMo
RewriteCond %{QUERY_STRING} ^((?:&?w+=w+)*)(?:&?uid=w{12})((?:&w+=w+)*)$
RewriteRule (.*)?$ http://i.example.co.jp$1?%1&uid=NULLGWDOCOMO%2 [R=302,L]

中小のモバイルサイトの場合、キャリア別にサーバーを分ける必要なさそうですよね
となると、uidがそのまま見える現象は大手のモバイルサイトに起きやすいと思います

コメントを残す