• ベストアンサー

vodafoneの古い携帯(P3P4など)でheader('Location: ')が使えない

携帯端末用のWebサイトをPHP4にて構築しています。 リダイレクトをさせようとheader( 'Location: http://www.test/test?id=100'); などと使用すると、引数がリダイレクト先で受け取れなくて困っています。 サーブレットの getRequestDispatcher のように、リクエストを丸投げできるフォワードのような処理ができる 方法はないでしょうか? (最近の3G端末などなら、引数のパラメータが取得できるのですが。。。) どなたかご存知の方、よろしくご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

UIDって、端末側で公開設定されていればUA文字列に挿入される端末IDの事ですよね?それ自体で相手を特定できるようなものではないですし、そもそも本人にのみ表示されるものですから問題ないような気もしますけど・・・詳しくはvodafoneの技術系の窓口に確認してみたらいかがでしょうか? 心配でしたら暗号化をするか、セッション等を使っていればセッション変数を利用してはどうでしょうか。暗号化といっても簡単なものでいいと思いますけど。 一文字づつord関数等を利用して桁数を揃えた数値化をして並べるだけでもいいと思いますよ。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.4

補足します。 UIDはvodafoneの端末からのリクエストでゲートウェイにて付加される情報です。ですがリダイレクトは端末からのリクエストではないという事で、ゲートウェイでは要求を無視するそうです。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

ああ、ならわかりました。 リダイレクトの場合はvoadfoneのゲートウェイを通過しないので(恐らくUIDも含むであろう)位置情報など端末からのクエリ文字列等は取得できません、というような事がHTTPのマニュアルのlocationの項に書いてあります。 リダイレクト元でUIDを取得し、GET等のパラメータとしてリダイレクト先に送るような処理が必要だと思います。

majikaru
質問者

お礼

ご返答が遅くなりまして申し訳ございません。 なるほど。そういう仕様があったんですね。 私が知りたい情報は、まさにそれでした。 お手数をかけさせた上に、正確な解答をしていただき 恐縮の極みです。 とすると A.php $uid_A = $header['x-jphone-uid']; header( 'Location: http://www.test/B.php?uid_B=uid_A' ) ; B.php $uid= $_GET['uid_B']; というような処理になるのでしょうか? このように、UIDをGETに渡すと URLにUIDのパラメータが表示されてしまい 問題ないのでしょうか?(POSTでなくて平気?) またもや重ねての質問になりますが、 どうぞよろしくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

うちではC3/C4でもこういう現象は起きていません。C2はさすがに今はサポートしていないので何とも言えませんが・・・。 ですので端末がこういう仕様になっているわけではないと思いますよ。リダイレクトでパラメータが渡せないなんてえらいこっちゃ、ですよ。 ですので原因はどこかにある、と考えた方がいいですね。ちなみにC/P/Wでブラウザ等の挙動は違いますから、P/WでOKだけどCはダメという事は大いにあり得ます。 まず疑うべきはLocationに与えているURLのパラメータ部分がHTTPというプロトコル的に正しいものになっているのかどうかですね。差し支えなければURL部分をheader関数の手前でprintさせて(その直後にexit()しないと表示されませんので注意)、URL部分は変えて構わないのでドメイン部以下(ディレクトリ部分含む)で載せて欲しいなと思います。お役に立てないかも知れませんが念のため。

majikaru
質問者

お礼

ご返答ありがとうございます。 またしても自分の勘違いでした。 リダイレクトにより、取得できないのは 「キャリアからのUID」でした。 リダイレクトの処理をさせているLocation部分に 必要なパラメータを渡してやると、 通常であれば、キャリアのゲートウェイを通過する時に UIDに変更してくれるはずなのですが こちらの受け取り元では、UIDが送られてきません(何の文字も取得できません) こちらの言う事が二転三転して申し訳ないですが 今度こそその通りの現象です。 通常のパラメータはLocationで取得できていました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

P型ってパケット対応機ですよね。うちではそのような現象は起きていないので、何か別な原因ではないでしょうか。 例えばセッションとか使ってますか?セッション絡みでVodafone一部端末で問題が起きた事があります。header関数に与える文字列は例と同じですか?どんな簡単な文字列でも受け渡しできませんか?また、リダイレクト先にはちゃんと飛んでいるのでしょうか。 vodafoneって「え?こんなトコの動作が違うの!?」って感じで種類毎に挙動が変わる事がありました。なので僕もこの質問には興味持ってます。

majikaru
質問者

お礼

ご返答ありがとうございます。 こちら、自分の勘違いで、現象が起きてしまうのは C2/C3/C4 でした。 ちなみに、リダイレクト先にはちゃんと飛んでいます。 そこでパラメータを受け取ると 値が入っていないのです。 またご返答頂ければ幸いです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • header('Location: http://www.exampl

    header('Location: http://www.example.com/'); PHPによる上記リダイレクト処理を、ブラウザ側で拒否できるような機能は存在するのでしょうか? そもそもこのリダイレクト処理というのはサーバサイドで動いているものなのでしょうか? 仕組みがよくわかりません。 たとえばDBにデータを登録後、リダイレクトでメール送信処理ページへ飛ばし、ユーザに登録内容をメールで送る、ということをしても問題ないのでしょうか? とりあえず画面遷移を拒否される可能性があるかないかだけでも教えてください。

    • ベストアンサー
    • PHP
  • header()関数によるリダイレクトについて

    下記のようなスクリプトにおいて、header()関数で、リダイレクトしているのですが、 ちゃんとリダイレクトできません。ちなみに、header()関数の前には HTML文も無い、PHPのみのスクリプトです。 どうすれば、リダイレクトできるか教えていただきたいのですが。 【profile_regist.php】 <?php if($_POST['ID_HANDLENAME']!==NULL) $handlename = $_POST['ID_HANDLENAME']; else header("Location: ~.html"); 中略 ?>

    • ベストアンサー
    • PHP
  • 環境をかえたら header(Location:)に不具合が?

    ローカル環境からWEBサーバに作ったPHPファイルを移動させたのですが、 header(Location:)がうまく動かなくなってしまいました。 アドレスがおかしいのかと思って いくつか試してみたんですが ファイルによってうまく行くのと行かないのがあるようです。 傾向としては $chkに5が入っていたら test.phpに移動する。 if($_SESSION['chk'] != '5'){  header('Location: ./test.php');  exit; } はうまく動くのですが ifでいくつか処理を行ったあとに if(isset($_POST('submit')){  いくつかの処理  header('Location: ./login.php'); } とするとうまく動かないという状態です。 どのようなケースが考えられるでしょうか アドバイスよろしくお願いします。

    • ベストアンサー
    • PHP
  • header("location~")をPOSTで渡す方法を探しています

    phpでの質問です。 header("location~")をPOSTで渡す方法を探しています。 携帯サイトなのでJavascriptは使えません。 shift-jisのサイトからutf-8のサイトへ渡します。 (1)307でリダイレクト header('Location: '.$url, true, 307); =>POSTの文字コードを変換できないのでダメでした。 (2)POSTで送信してからリダイレクト http://questionbox.jp.msn.com/qa3554188.html?StatusCheck=ON =>うまくいきません。やり方が悪いのかもしれません…。 送り元のサイトの文字コードをutf-8にしてしまえば解決するのですが、携帯サイトなのでshift-jisにするしかありません。 (最近ではほとんどの機種がutf-8対応になっていますが、社長の機種が対応していなくて…) よろしくお願いします。

    • ベストアンサー
    • PHP
  • header関数について

    header関数について独自関数を絡ませたいのですがいい方法が 思いつかず悩んでおります。 パソコン用、携帯用サイトがあり携帯サイトのみheaderで飛ばした URLの最後にセッションを付加したいと思っております。 // 分岐により携帯であればセッションを変数作成しています。 $sis_id = '?' . session_name() . '=' . session_id(); // パソコンであれば$sis_idはnullなのでこの状態でもなにも付加されません。 header('Location: hoge.php' . $sis_id); ここまでは問題ないのですが以下のようにURLに他のパラメーターを 持っている場合どうすればいいでしょうか? header('Location: hoge.php?id=5' . $sis_id); これだと$sis_idの頭は?ではなく&が必要になりますよね。 仮に$sis_idの?を外して以下のように書き換えるという手も考えた のですがパソコンの場合hoge.php?id=5&のようなURLになってしまいます。 header('Location: hoge.php?id=5&' . $sis_id); if文で分岐させそれぞれの飛び先をべた書き指定すれば済む話 なのですがソースを簡略化させたく独自関数などで自動化できない ものかと思っております。 詳しい方がおりましたら是非アドバイスなど宜しくお願い致します。

    • ベストアンサー
    • PHP
  • header("Location: mailto:

    header("Location: mailto: でメーラを開く時、本文を改行させたらエラーになるのですが、回避する方法はありませんか? <?php // 送信ボタンが押されたら if (isset($_POST["submit"])) { $wk_adrs = "web@test.sakura.ne.jp"; $wk_subject = "サブジェクト"; // これはOK $wk_body = "ボディー"; // これはNG $wk_body = "1行目ボディー".PHP_EOL."2行目ボディー"; // これもG $wk_body = <<< EOM 1行目ボディー 2行目ボディー EOM; // 画面遷移させる $wk_Location="Location: mailto:".$wk_adrs."?subject=".$wk_subject."&body=".$wk_body; header($wk_Location); exit; } ?> 下記のメッセージが出る Warning: Header may not contain more than a single header, new line detected in

    • ベストアンサー
    • PHP
  • locationでジャンプした場合GETパラメータは認識されるの?(携帯編)

    (携帯サイトの場合です) I.まず下記のようにlocationヘッダでジャンプさせます。 header("Location: http://hoge.com/test.php?id=ok"); II.ジャンプ先で $id = $_GET["ok"]; とした場合GETパラメータは正常に取得できるのでしょうか。 お分かりになる方よろしくお願い致します。

    • 締切済み
    • PHP
  • headerについて

    <?php header("Location:x.php?y=1"); exit; ?> はOKですが <?php $_GET['xx']; header("Location:x.php?y=1"); exit; ?> はだめです エラーメッセージは Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/z.php:2) in /var/www/html/z.php on line 3 $_GET['xx']や$_POST['xx']などをheaderの前に置けないと非常に困ります (上はテスト用PHPです) どうしたらいいでしょうか?

    • ベストアンサー
    • PHP
  • Locationでアンカーに飛ばしたい

    下記のPHPを作り、 name_idがなかったらname.php?a1=user_idに飛ばす、 name_idがあったらuser.php?a2=name_idに飛ばしています。 ここまでは問題ありません。 今回、 name.php?a1=user_id#name user.php?a2=name_id#name と、それぞれのページの#nameのアンカーが付いているところに飛ばしたいと考えています。 しかしながら、単純に下記を header("Location: name.php?a1=$type#name:"); のようにアンカーを追加したたでけでは思う行に飛ばすことができません。 Location で他のページのアンカーに飛ばすにはどうすば良いでしょうか? 宜しくお願い致します。 <?php $type = $_GET['user_id']; $type2 = $_GET['name_id']; if (empty($type2)) { header("HTTP/1.1 301 Moved Permanently"); header("Location: name.php?a1=$type:"); exit(); } else { header("HTTP/1.1 301 Moved Permanently"); header("Location: user.php?a2=$type2:"); exit(); }; ?>

    • ベストアンサー
    • PHP
  • header(Location:~)で$_SESSION[" "]が保持されない。

    自宅サーバー(apache2+php5+mysql5)のlocalhost環境で、 header(Lcation:~)の記述をすると、 セッションが保持されない現象が起きています。 本番環境のレンタルサーバーは、同じ記述で、 しっかりとセッションが保持されます。 この原因は、何でしょうか? php.iniの設定など、何か考えられることがあれば、 是非教えて下さい。 【やりたいこと】 ■a.php **************************************** <?php echo<<<EOD <form method="POST" action="./b.php"> <INPUT type="text" name="test"> <INPUT type="submit" name="Submit" value="確認画面へ"> </form> EOD; ?> ■b.php **************************************** <?php $_SESSION["test"]=$_POST["test"]; header("Location:./c.php"); ?> ■c.php **************************************** <?php echo $_SESSION["test"]; ?> 自宅サーバーだと、 a.phpで入れたデータが、c.phpで表示されません。 レンタルサーバーだと、 セッションが保持され、表示されます。

    • ベストアンサー
    • PHP