• ベストアンサー

ページ移動について

例えば、◯◯.phpへアクセスの際、◯◯.phpのプログラム内でrequire_onceを使い認証プログラム(□□.php)を呼び出して、認証が成功したら◯◯.phpへ飛ばしたいのですがどのようにしたらいいのでしょうか?(△△.phpへのアクセスの際は、認証成功したら△△.phpに飛ばしたい) header("Location: ".$_SERVER['PHP_SELF']);では、□□.phpに飛んでしまいます。

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

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

PEAR の Auth_Controller を使うといいですよ。使い方はソース内に記述されておりますので、そちらをご参照ください。 希望する動作でなくとも、その手法が参考になるかと思います。

参考URL:
http://pear.php.net/package/Auth/docs/latest/apidoc/Auth/Auth_Controller.html
全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.4

返信ありがとうございます。 で、あれば、やっぱり、認証に失敗したら、エラーページなり、ログインページなりにLocationさせる、という処理でいい気がするんですが、それだと何か不都合がありますか? ○○.phpにアクセスして認証が通ったら○○.phpにリダイレクトさせたい意図はなんでしょうか。

yuu789
質問者

補足

認証失敗の場合ではなく成功した場合です。 (○○.phpにアクセスして認証が通ったら○○.phpにリダイレクト) 回答お待ちしています。

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

質問者さんが言っている「認証プログラム」ですが、 これは、HTMLを含む、ログイン画面の事を指していますか? それとも、セッションなどの認証ライブラリ(クラスだとか関数群だとか)のことを指していますか? もし、前者なのであれば、△△.phpに対して、require_once して実装するのはなんか違う気がします。 もし可能でしたら、その、□□.phpに記述されている処理の概要と、△△.phpに記述されている処理の概要を教えてください。

yuu789
質問者

補足

引き続きの回答ありがとうございます。 ログイン画面のことです。PEARのAuth関数を使って作成し、HTMLは含んでいません。 ◯◯.php,△△.phpでは、その認証プログラムを読み込んでいるだけです。 回答お待ちしています。

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

俺だったらテンプレートエンジンを利用してテンプレートを変えて エラーページも認証成功ページも一つのPHPファイルでまかなう。

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

それは、発想を逆に出来ませんか。 認証に失敗したらエラーページへ飛ばす。 <?php require_once 'auth.php'; //認証プログラムを呼び出して if(!auth()){ //何らかの認証の関数とか?で失敗したら header('Location: error.php'); } ?> とか。

yuu789
質問者

補足

回答ありがとうございます。 勉強不足でよくわからないのですが、 それだと、認証成功しても結果は現在と変わらないと思うのですが…

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

関連するQ&A

  • 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
  • 動的ページで全ての情報を検索対象にする正しいやり方

    ■/(ルートディレクトリ) ├─□index.php ├─■actionディレクトリ(各ページ共通に使用するファイルを格納) │  ├─□contents.php │  ├─□header.php(contents.phpのheader部) │  ├─□left.php(contents.phpのleft部) │  ├─□right.php(contents.phpのright部) │  ├─□footer.php(contents.phpのfooter部) │  ├─□class-teisuu.php(定数を格納) │  ├─□class-kannsuu.php(関数を格納) │  └─□class-mysql.php(mysqlの接続とクエリ) ├─■contentsディレクトリ(各コンテンツの情報を格納) │  ├─■0001 │  │  └─■imageディレクトリ(そのコンテンツの写真を格納) │  │     └─□001~n.jpg   --------------------------   1266コンテンツまで繰り返し   -------------------------- └─└─■1266      └─■imageディレクトリ(そのコンテンツの写真を格納)          └─□001~n.jpg contents.php ------------ <?php require_once("header.php"); require_once("right.php"); require_once("left.php"); require_once("footer.php"); require_once("class-teisuu.php"); require_once("class-kannsuu.php"); require_once("class-mysql.php"); ?> PHPとMYSQLで作った動的ページがあります。 index.phpで見たいコンテンツの絞込をやり、 0001~1266コンテンツのどれか1ページを見れるようにします。 そのときにindex.phpからcontents.phpに$_GET['n']='1211'というように コンテンツを判別する値を渡すことで1211のページを開くことができます。 そして、ヤフーなどの検索から直接そのcontents.phpに来た時にちゃんと開くように (isset($_GET['n'])) ? $pegenumber=$_GET['n'] : $pegenumber='0777'; のようにして$pegenumberが空にならないようにしています。 そこまではいいのですが、SEOを考えたときに問題があるのでは?と疑問に思いました。 せっかく情報が1266分もあるのに、そのやり方だと0777以外は検索されないですよね? 外部から来たものへ全てのコンテンツを検索対象にするためには、 contents.phpをactionディレクトリに置くのではなく、 contentsディレクトリの各ディレクトリの中に置きます。 そして、$_GET['n']をなくして、各contents.phpに$pegenumber='コンテンツ番号' を直接指定したほうがそれぞれ検索されるようになり、ちゃんと中身も表示されるようになる。 この考えは正しいですか? ■/(ルートディレクトリ) ├─□index.php ├─■actionディレクトリ(各ページ共通に使用するファイルを格納) │  ├─□header.php(各ページのheader部) │  ├─□left.php(各ページのleft部) │  ├─□right.php(各ページのright部) │  ├─□footer.php(各ページのfooter部) │  ├─□class-teisuu.php(定数を格納) │  ├─□class-kannsuu.php(関数を格納) │  └─□class-mysql.php(mysqlの接続とクエリ) ├─■contentsディレクトリ(各ページの情報を格納) │  ├─■0001 │  │  ├─□contents.php($pegenumber='001'を格納) │  │  └─■imageディレクトリ(そのページの写真を格納) │  │     └─□001~n.jpg   ----------------   1266まで繰り返し   ---------------- └─└─■1266     ├─□contents.php($pegenumber='1266'を格納)     └─■imageディレクトリ(そのページの写真を格納)        └─□001~n.jpg 0777ディレクトリのcontents.php ------------------------------ <?php $pegenumber='0777' require_once("../../action/header.php"); require_once("../../action/right.php"); require_once("../../action/left.php"); require_once("../../action/footer.php"); require_once("../../action/class-teisuu.php"); require_once("../../action/class-kannsuu.php"); require_once("../../action/class-mysql.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
  • AからBへセッション変数の受け渡し(ページ間の移動うまくできない)

    Aプログラム後半部分より //下記をセッション変数に登録 //$_SESSION[セッション変数名] = 値; $_SESSION[suid] = $uid; print "uid = ".$_SESSION[suid]. "<br>"; //確認してます //ページをadminpageに飛ばす ?><BR> <a href="adminpage.php">認証されました。管理者ページへ</a> </body> </html> Bプログラム前半部分/*管理者ページadminpage.php*/ session_start(); print "uid = ".$_SESSION[suid]. "<br>";//確認表示 // いきなりこのページにアクセスがあった場合 if( !$_SESSION[suid] ){ session_destroy(); header("Location: index.php"); exit; } ?> というプログラムですが、Bのプログラムの確認表示部分で"$_SESSION[suid]"が表示されません。Aプログラムでは表示されます。 プログラムの他の部分は個別に動作確認済みです。 エラーとして、ユーザーページの移動時(成功プログラム)に使った$_SESSION[suid]の値が表示されたりもします。原因を教えて下さい。

    • 締切済み
    • PHP
  • セッションを使ったログインページでのエラー

    前にもセッションを使ったログインページについて質問したものです。 上記の通りセッションを使ったログインページを作っております。 前回このソースを載せたときセキュリティー的にとても危険だというご意見をいただきました。何分まだ初心者ですのでどうかご了承ください。 ソース /*ログインのページは省略しました。ログイン後ID・パスワードが正しいか、そして訪問者がログインせずにこのページに直接アクセスした際にログインページにジャンプするようにするようにするプログラムです*/ <?PHP if (!isset($user) || !isset($pass)) { header( "Location: loginPage.php" ); } elseif (empty($user) || empty($pass)) { header( "Location: loginPage.php" ); } else { $user = addslashes($_POST['username']); $pass = md5($_POST['password']); $dbHost = "localhost"; $dbUser = "*****"; $dbPass = "*****"; $dbDatabase = "mysql"; $db = mysql_connect("$dbHost", "$dbUser", "$dbPass") or die ("Error connecting to database."); mysql_select_db("$dbDatabase", $db) or die ("Couldn't select the database."); $result=mysql_query("select * from users where username='$user' AND password='$pass'", $db); $rowCheck = mysql_num_rows($result); if($rowCheck > 0){ while($row = mysql_fetch_array($result)){ session_start(); session_register('username'); echo 'Success!'; header( "Location: checkLogin.php" ); } } else { echo 'Incorrect login name or password. Please try again.'; } } ?> このようなプログラムを作ったのですが、ちゃんとパスワードをいれても、ちゃんと認証されずに、ログインのページ戻されてしまいます。 おそらく if (!isset($user) || !isset($pass)) { header( "Location: loginPage.php" ); } elseif (empty($user) || empty($pass)) { header( "Location: loginPage.php" ); } の部分がおかしいのかと思いますがどう変えたら良いのかよく分かりません。また、おかしいと思った部分を削除したら普通にログインはできるのですが、今度は一度ログインしても他のページに移動した後もう一度このページに行くと、もう一度ログインしないとアクセスできなくなりました。 まとめると、お聞きしたいことは、2つです。 (1)紹介したのプログラムでログインしてもちゃんとログインが認証されない。これを解消するにはどうすればいいのか? (2)ユーザーがログインした後もう一度このページにアクセスした場合もう一度ログインさせなくてもいいようにすればどうすればよいのか。 もし可能でしたら、解決するためのプログラムを(さらに可能でしたら紹介したプログラムを生かした形で)添えてアドバイスしていただけないでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 携帯電話の認証

    パソコン上でアクセスできる会員認証のページを携帯版に書き直しました。 一部の携帯(新しい機種)は、その機能が使えますが、一部の機種(Docomoの古い機種とVodafoneの一部機種)がログインできない、どうしてですか? システムは、セッション認証を使い、振り分ける時、「header("Location: info.php");」を使っています。 もしかして、古い機種が「header("Location: info.php");」を認識できないですか? ご存じの方がいっらしゃいましたら、どうぞお教え下さい。

    • ベストアンサー
    • PHP
  • 携帯サイトの認証時の画面移動について pear authを利用します。

    現在、phpでpear authを使ってのpcサイトを作成済みです。 そのpcサイトのソースを活かしつつ、今回は 携帯サイトを作ろうと思っています。 携帯(i-mode)では、この方法でセッションの持ちまわしができないのでしょうか? たとえば、このようにした場合は、contents.php側では、どのように 認証済みか判断すれば良いのでしょうか?URL直打アクセスを防ぐ前提で。 header("Location: contents.php?sid=$sid"); if(isset($sid))ではURL直打アクセスを許してしまいます。 現状↓ ---------------------------------------------------- index.php ----------------------------------------------------- $authobj = new Auth("DB", $params, "loginFunction"); $authobj->start(); if ($authobj->getAuth()){ // 1 header("Location: contents.php"); }else{ print("認証されていません"); } -------------------------------------------------------- contents.php -------------------------------------------------------- $authobj = new Auth("DB", $params); $authobj->start(); if ($authobj->getAuth()){ //ここのif文が通らない。空です。 print("認証済みです"); }else{ print("認証されていません"); } ソース例など挙げていただけると幸いです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 動的ページを作る時のディレクトとリファイル構成

    動的ページを作るとき、レイアウトを変更するときに一括でできるように contents.phpをrequire_onceで各ファイルを読み込んで組み立てています。 このような感じで構成するのは正しいでしょうか。 ■/(ルートディレクトリ) ├─□index.php ├─■actionディレクトリ(各ページ共通に使用するファイルを格納) │  ├─□header.php(各ページのheader部) │  ├─□left.php(各ページのleft部) │  ├─□right.php(各ページのright部) │  ├─□footer.php(各ページのfooter部) │  ├─□class-teisuu.php(定数を格納) │  ├─□class-kannsuu.php(関数を格納) │  └─□class-mysql.php(mysqlの接続とクエリ) ├─■contentsディレクトリ(各ページの情報を格納) │  ├─■0001 │  │  ├─□contents.php($pegenumber='001'を格納) │  │  └─■imageディレクトリ(そのページの写真を格納) │  │     └─□001~n.jpg   ----------------   1266まで繰り返し   ---------------- └─-└─■1266       ├─□contents.php($pegenumber='1266'を格納)       └─■imageディレクトリ(そのページの写真を格納)          └─□001~n.jpg 0777ディレクトリのcontents.php ------------------------------ <?php $pegenumber='0777' require_once("../../action/header.php"); require_once("../../action/right.php"); require_once("../../action/left.php"); require_once("../../action/footer.php"); require_once("../../action/class-teisuu.php"); require_once("../../action/class-kannsuu.php"); require_once("../../action/class-mysql.php"); ?> header.php ------------------------------ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta name="keywords" content="<?php echo $a1.','~.$a10; ?>" /> <meta name="description" content="<?php echo $b1.$b2.$b3.'のサンプルです。'; ?>" /> <link href="~~~" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="~~~"></script> <title><?php echo $title; ?></title> </head> <body> <div class="owner"> <!-- ヘッダー部分 --> <div> </div>//ヘッダー終わり right.php ------------------------------ 「</div>//ヘッダー終わり」からの続き <!-- メインコンテンツ --> <div> </div>//メインコンテンツ終わり left.php ------------------------------ 「</div>//メインコンテンツ終わり」からの続き <!-- レフトカラム部分 --> <div> </div>//レフトカラム終わり footer.php ------------------------------ 「</div>//フッター部分終わり」からの続き <!-- フッター部分 --> <div> </div>//フッター終わり </div>//owner終わり </body> </html>

    • ベストアンサー
    • PHP
  • Location後の処理について

    header("Location:./hoge.php"); などとして画面遷移を行った場合、これより下の行に書かれた処理は行われているのでしょうか? たとえば if (認証処理) { ログファイルに書込 header("Location:./hoge.php"); } とすればログを書いた後に遷移するのはわかりますが、 if (認証処理) { header("Location:./hoge.php"); ログファイルに書込 } 何らかの処理2 とした場合、ログに書き込みや処理2などは実行されているのでしょうか?

    • ベストアンサー
    • PHP
  • ログイン認証のページの流れ

    こんばんは。お世話になっております。 初歩的な質問かとは思いますが、これまでlocal上、およびあるレンタルサーバ上では問題のなかったものが、今回別のサーバーをお借りしたら、以下のような不具合が出てきてしまいまいました。 タイトルのようにログインに関するもので、ロープに陥ってると・・。 メインページ(ログイン済みのみ閲覧可能) index.php <?php session_start(); if(!isset($_SESSION["id"]){ header("Location: http://***.com/login/"); }   ・   ・ /login/index.php <?php session_start(); require_once("./auth.php"); //以下、ログインが必要なページは全てここのファイルを経過させ、元のページに戻るソースを記述。 if(isset($_GET["url"])){   ・   ・ /login/auth.php <?php //ログイン入力フォームおよびDB問合せスクリプト 以上のようなファイル構成なのですが、最上位のindex.phpを訪問した際、ログインしていなかったら http://***.com/login/ に移動し、ログイン画面を表示する・・という流れを想定しておしましたが、あるサーバでは以上のようなものだとループに陥ってしまうとの障害が確認出来ました。 ローカル上、別サーバでは問題ない(目視で確認出来る障害が無いという意味)ことだったので、流れを見直そうにも的が見えてきません。 相応しくない点、可笑しな点、どんな些細な事でも結構です。お忙しい中恐縮ですが、アドバイスいただけたら幸いです。宜しくお願い申し上げます。

    • 締切済み
    • PHP