• ベストアンサー

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文で分岐させそれぞれの飛び先をべた書き指定すれば済む話 なのですがソースを簡略化させたく独自関数などで自動化できない ものかと思っております。 詳しい方がおりましたら是非アドバイスなど宜しくお願い致します。

  • dcx147
  • お礼率33% (214/636)
  • PHP
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

文字列操作的な質問ということでいいのでしょうか? <?php $sis_id = session_name() . '=' . session_id(); $url = 'oge.php?id=5'; echo addParams($url, $sis_id); redirect($url, $sis_id); function addParams($url, $params = null) {   if (!$params) {     return $url;   }   if (strpos($url, '?') === false) {     return $url . '?' . $params;   }   return $url . '&' . $params; } function redirect($url, $params = null) {   $url = addParams($url, $params);   header('Location: ' . $url); }

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

場合分けさえ考えればそんなに難しい話ではないのでは? たとえばURLに「?」がはいっていれば&でつなぎ、そうでなければ 「?」でつなぐとか、やりようはあるでしょう <? $url="hoge.php?id=5"; $sis_id="hoge"; $url.=(preg_match("/\?/",$url)?"&":"?").$sis_id; header('Location: ' . $url); ?>

関連するQ&A

  • header()関数によるリダイレクトについて

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

    • ベストアンサー
    • PHP
  • header関数が使えない

    <html> <head> </head> <body> <?php header("Location: http://www.php.net/"); exit; ?> </body> </html> のように、単にheader関数を試したら Warning: Cannot add header information - headers already sent by (output started at /home/***/index.php:5) in /home/***/index.php on line 6 のようなエラーがでました。header関数が使えないようなのですが、これはどこの設定を直せば解決できるのでしょうか? 普通に、phpinfo.phpは表示できるので、phpそのものは使えています。 Apache/1.3.26 PHP 4.2.2

    • ベストアンサー
    • PHP
  • php header

    <?php header("Location: http://www.example.com/"); exit; ?> 上記のheaderですと該当ページに飛んでしまいます。 直接飛んでしまうのではなく直接CGIにURLを送りたいのですが 関数等ありますか?わかりやすく言うとURLだけ送信したい。 clickした事にしたいです。

  • GETとheader

    お世話になっております。 適切な題名が思い浮かばず、「GETとheader」といたしましたが、以下のような流れの中(ソースは流れだけのものです)、 A.php $url = $http://www.○○.com/a.php?id=△△&key=□□//各キーの数は変動 header( "$http://www.○○.com/b.php?url=$url"); B.php $url=$_GET["url"]; header( "$url"); としたいのですが、このままだと、$http://www.○○.com/a.php?id=△△ までしか渡されず、b.phpにおいて、$urlをexplode関数により、分割してみたり、parse_url関数を用いて試してみたりしていますが、上手くb.phpからa.phpへ戻すことが出来ません。 適当な関数だけでも構いませんので、アドバイスなど頂戴できたら幸いです。宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • セッションについて

    php初心者&ど素人です 勉強のためにphpとmysqlで簡単なログイン機能を作ってみようと思いました しかし、Locationでページ移動したときのセッションがセキュリティ的に安全なのかわかりません ログインフォームのlogin.phpから自分自身に送信、ログインできたらセッションを付けてから header("Location:hoge.php");でhoge.phpに飛ばしています ログインした後のhoge.phpページではログイン確認をセッションidがあるかだけ確認しています セッションidがなかったらログインページ戻す if(!$_SESSION['id']){ header('Location: login.php'); exit(); } 質問1 セッションidは表示されている誰でも見れるidなのでセキュリティ的にまずいですか? 簡単にセッションのっとれるもんなんでしょうか? 質問2 一般的にはどうやているのでしょうか? ログインページ全て(例えば編集画面とか会員情報とか)にmysqlから暗号化されたパスワードを取得して、それをセクションに入れて、また、mysqlからパスワードと照合したりしてるんでしょうか? よろしくお願いします

    • ベストアンサー
    • PHP
  • PHP header関数が使えない

    OS:Linux PHP、Postgres のシステム環境です。 現在PHPのheader()関数が動いてくれません。 (リダイレクトできない。) <HTML> <HEAD><TITLE>aaaa</TITLE></HEAD> <BODY> <?php header('Location: http://aaa.com/'); ?> </BODY> </HTML> こんな風にHTMLタグなにか出力した後にheader関数を呼び出すとエラーになり、headerのコールはすべての出力の前に行うこととサイトで調べてみまして分かったのですが。 あるシステムではHTMLタグの中に入れてもheader関数は問題なく動いています。 php.iniの設定なのでしょうか、それともプログラムの記述方法で回避できるのでしょうか? このおかげで膨大な修正が必要になりました。 回避策はございますでしょうか? よろしくお願いいたします。

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

    現在、下記WebプログラムがPHP等にて開発可能か検討しております。 前提1:既存の認証画面と認可アプリは、カスタマイズを行えない。(共にソースは非公開) 前提2:認証画面からHTTPヘッダに付加してアプリを呼び出し、アプリ側にて値を取得しています。      また、HTTPヘッダの設定内容は判明しております。 前提条件の環境で、HTTPヘッダ情報を強制的に変更する必要が発生してしまい、PHPのheader関数を使用できないか調べております。 認証画面から新プログラム(PHP等)を経由してアプリを呼び出しするように変更した場合、header関数は有効な使い方となりますでしょうか? またアプリのURLを呼び出し時に、考慮しないといけない点とかもあるのでしょうか? 該当する参考のページが見つかりませんでしたので、質問させていただきました。 よろしくお願いします。

    • 締切済み
    • PHP
  • header関数でページ移動しない

    現在携帯サイトをPHPで作成しているのですが下記のようなコードを書くと、ページが移動しません。 本来は条件処理をした後で、ページ移動させたい地のですが、 一番シンプルなコードにしてもページが移動してくれません。 ローカルサーバーのVine Linuxでは動作するのですが、 ロリポップ、114090、berrysan.net(http://www.berrysan.net/index.html) などでは動作してくれません。 ---------------- 以下 ページが移動しない --------------- <?php  //サイト設定ファイル読み込み  require_once("./setini.php");  $Url = "http://oshiete.goo.ne.jp/";  header("Location: $Url"); ?> ------------------------------------------------------ ---------------- 以下 ページが移動する ---------------- <?php  //サイト設定ファイル読み込み  //require_once("./setini.php");  $Url = "http://oshiete.goo.ne.jp/";  header("Location: $Url"); ?> ------------------------------------------------------ setini.phpは、下記のようなdefine定義があるだけです。 <?php define("TOP_FILE","./index.php"); : : ?> 何処か使い方がおかしいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • header関数でページ移動する場合の変数について

    MySQLとPHPを使ったWebシステムの勉強をしているPHP初心者です。 現在ログイン認証ページを作っており、 (1)IDとパスワードをフォームで入力     ↓ (2)action='$PHP_SELF'で同じページにリダイレクト     ↓ (3)認証を確認し次第header関数で自動的に別のページに飛ばす     ↓ (4)IDに応じてページの内容を変える。 という風にしています。(3)の部分のソースコードは(かなり省いてはいますが)以下の通りです。 if (session_is_registered($ADMSESS)) { header("location: admnew.php"); } ここで、(3)までのページで使っていた変数を(4)のページでも受け取り、そのまま使いたいと思っているのですが、どうしたらいいでしょうか。今は(4)を開いたとき、どのようなIDでログインしても同じページが表示されています。 分かりにくいですね、、HTMLベースのフォームだとaction=POSTを用いて飛ばした変数を $変数 = $_POST['変数'];として受け取ることが出来ますが、PHPで同じことをやろうとするとどうなるのか、ということです。 分かる方いましたら、どうか御回答宜しくお願いします。

    • ベストアンサー
    • PHP
  • header関数で画面が切り替わらない

    a.phpにボタンがあり、押されるとb.phpに飛んである処理を行い、c.phpで完了メッセージを出す、というようなものを作成しています。 b.phpで処理後、header("Location: end.php");というのを使っているのですが、 ページが切り替わらずに(URLがb.phpのまま)、ページを表示できませんと出てしまいます。 一体何が原因なのでしょうか? これが出来ないと先に進まないので困っています・・・

    • ベストアンサー
    • PHP

専門家に質問してみよう