• 締切済み

ログインした状態の外部phpファイルを、ログインした状態で出力したい

すみません。もう何日も悩んでしまっているので、どなたかお知恵をお貸しください・・・PHP初心者なので、分かりづらい部分が多々あるかと思います。申し訳ないです。 【質問】 自分で借りているサーバーを http://www.○○○.com とします。 もうひとつ、他社で無料で会員制ショッピングカートのようなものを借りています。http://□□□.com/index.php とします。 http://www.○○○.com/index.php を作成し、ページの上部でその他社のショッピングカートではない部分(凝ったメニューや、タイトル部分)を表示させて、その後に <?php $flag=0; $_GET[site] = "http://□□□.com/index.php"; $page = @file($_GET[site]); if($page=="") die("Connection Failed"); echo "<base href='http://□□□.com/index.php'>"; while (list($num, $line) = each($page)){ if(eregi("</body",$line)){ $flag=2;} if($flag == 1){ echo $line; } if(eregi("<body",$line)){ $flag=1;} } ?> という感じで、そのショッピングカートページの<body>から</body>部分を出力させています。 カートページでは、ログインすると、ページ上部の右側にログインしました状態ですよ。という感じの表示が出ます。登録してある名前が出て、○○さん、ようこそ♪みたいな感じです。 上のようにカートページを引っ張ってきて表示させてる状態で、http://www.○○○.com/index.php からフォームよりログインしようとしても、そのログインしたよ。というような表示が出ません。 ちなみに、ログインフォームは action="http://□□□.com/index.php" でメゾットがPOSTです。 login_idとlogin_passをフォームで送信して、ログイン状態にしているようです。 どうしたら、ログインした状態のカートページを出力できますでしょうか?

  • PHP
  • 回答数2
  • ありがとう数9

みんなの回答

  • suzuki-_-
  • ベストアンサー率77% (152/195)
回答No.2

まず、カートページへログインした際に発行されるセッション情報は、 ブラウザを閲覧しているあなたの情報を基に構築されます 次に、○○○.com側のindex.phpで実行される処理 > $_GET[site] = "http://□□□.com/index.php"; > $page = @file($_GET[site]); この場合、http://□□□.com/index.phpにアクセスしたのは、 ブラウザを閲覧しているあなたではなく、○○○.com側の実行サーバです なので、ログイン状態にする為の判別データ(あなたの情報)を 保持していない実行サーバから見たhttp://□□□.com/index.phpは 当然ログインも何もしていない状態です その状態での出力内容を取得して、html内容として吐いてるだけなので、 ○○○.comでindex.phpを見ても、あなたがログインした状態にはならないということです // 要するに全てを可能にするには、□□□.comのカート用システムも把握(or編集)できないと無理ですよ、ということです

mihomaru
質問者

お礼

suzuki-_-さん、レスありがとうございます。 なるほど、納得です。 とりあえず、□□□.comのカートシステムはある程度は編集できるので、もう少しセッションについて勉強して、もう少しチャレンジしてみます。 ありがとうございました!

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.1

mihomaru さん、おはようございます。 さてご質問ですが、他社のHPの<body>~</body>部分を持ってきて、自分のところへ表示させているわけですが、残念ながら これではうまく動作しません。  http://□□□.com/index.php は、その他社サーバのその位置に置かれて初めて、正しい動作をします。にもかかわらず、<body>~</body>だけを抜き出して全然別のサーバの、別ファイルに組み込んでしまうと、動作条件が変わってきてしまいます。  あと、セッションの問題もあると思います。これについてはお手持ちの書籍などでお調べになってみてください。 …ご質問、書き方が大変スッキリとしてわかりやすく、助かりましたよ。mihomaru さんはきっと良いエンジニアになることができるでしょう。

mihomaru
質問者

お礼

hkd90011さん、ご回答ありがとうございました! そうなのですね・・・自分でも無謀だなぁとは思っていました; インラインフレームを利用すれば、同じような動作が問題なく動くのですが、検索(SEO)の面から見てもphpで出力したほうが、良いと思ってこの方法で何とか考えていました。 この方法はあきらめるしかないと、尚更思ったのですが、あがきでもう少し質問させてください! 例えば、​http://www.​○○○.com/index.php からログインすると、上記のように自分の思い通りには動かないのですが、その次に http://□□□.com/index.php を表示すると、ちゃんとログインしているのです。クッキーを削除してページを更新してもログイン状態であるし、プラウザを閉じて、また、カートページを表示させると、ログアウトしていることから、教えていただいたように、セッション?を利用しているのだと思うのですが・・・ (長くなりそうなので、次に続かさせてください;;;)・・・続く

mihomaru
質問者

補足

先ほどの続きです。・・・続き http://□□□.com/index.php を表示させるとログインしているということは、表示させる段階(ページを読み込む時)でセッションを取得して情報取得→ログインとしてから、ページを出力していると思うのです。ということは、 $_GET[site] = "http://□□□.com/index.php"; $page = @file($_GET[site]); の時には、すでにhttp://□□□.com/index.phpはログインした状態のファイルを読み込んでいることにはならないのでしょうか・・・? また、セッションは、ページ間はずっと保たれると思うので、http://www.○○○.com/index.php からでも問題ないのでは?と思ったのですが・・・$page = @file($_GET[site]);の一文はhttp://□□□.com/index.phpの既に読み込まれて出力されたファイルを引っ張ってきているという意味にはなっていないのでしょうか? 悪あがきですみません。 分かりやすく伝えるのは本当に難しいですね;申し訳ありません! 頑張って良いエンジニア・・・になりたいです(^^; 丁寧に答えていただきありがとうございました。

関連するQ&A

  • 一つのphpファイルでログイン画面を作りたい

    一つのphpファイルでログイン画面を作りたい 一つのphpファイルでログイン画面→管理者画面 ログインエラー画面を作りたいと思っております。 下記のスクリプトで上手くセッションが保持できないので、 どなたかご教授ください。 宜しくお願いいたします。 -------------------------------------------- session_start(); //パスワードチェック $error_flag = 0; if(isset($_POST["login"])){ if($_POST["id"] == $login_id && $_POST["password"] == $login_pass){ $_SESSION["login"]["admin"] = 1; }else{ $error_flag = 1; } } if(isset($_SESSION["login"]["admin"]) && $_SESSION["login"]["admin"] == 1){ //管理者画面 }else{ //エラー画面 }

    • ベストアンサー
    • PHP
  • phpで動的タイトル

    phpで動的タイトルを作りたいのですが$page_titleが 表示できません。 body.phpに<html>~<body>を書きindex.phpに読み込み表示させ index.phpに$page_titleがあればタイトルに表示させるように したく下記のようにしてみましたが表示されませんでした。 試しにindex.phpの$page_titleを消すとタイトルの文字のみが 出力されるので値があるかについては大丈夫かと思うのですが どのようにすれば表示されるのでしょうか? ---body.php--- if($page_titel) { echo "<title>タイトル - ".$page_title."</title>\n"; } else { echo "<title>タイトル</title>\n"; } ---index.php--- $page_titel = "ページタイトル"; require_once "body.php";

    • ベストアンサー
    • PHP
  • PHP ログインについて

    PHPを使い会員サイトを作っています。 遷移としては index→login→top でログインして中の各ページで、サイトロゴをクリックすればマイページトップに戻るようにしたいです。 ログイン時はPOSTでデータを受け取り、ログイン後はセッションで全ページを繋いでいます。 そののtopで困っています。 ログインしようとすると画面が真っ白になり、検証を見てもエラーは出ていませんでした。エラー表示になるよう設定しており、今までのエラーは見れていました。 session_start(); if(!isset( $_SESSION["uid"])&&(!isset( $_SESSION["pass"]))){ if(!isset ( $_POST ["uid"] )&&(!isset( $_POST["pass"]))){ header ( "Location: login.php" );} } if((isset ( $_POST ["uid"] ))&&(isset( $_POST["pass"]))){ login(); exit; } 上記で$_SESSIONのuidとpassがなければ$_POSTのuidとpassをチェック。$_POSTもなければ、login画面に移動。 $_POSTが入っていたら次のIF文で、関数login()。 関数login()は下記の通りです。 function login(){   function inputCheck($uid, $pass){ $flg=0; // IDの登録チェック require("dbConnect.php");//接続 $sql = "select * from usr where uid ={$uid}" ; //echo "sql=".$sql."<br>"; $result = $dbInfo->query ( $sql ); $record = $result->fetch ( PDO::FETCH_ASSOC ); $count = $result->rowCount (); if($count<=0){ echo "このIDは存在しません<br>"; $flg=1; } if($pass<>$record["pass"]){ echo "パスワードが違います<br>"; $flg=1; // データベースの切断 $dbInfo = null; } return $flg; } // 送信データの取得 $uid = htmlspecialchars($_POST ["uid"], ENT_QUOTES); $pass = htmlspecialchars($_POST ["pass"], ENT_QUOTES); $flg=inputCheck($uid, $pass); if($flg<>0){ require("login.php"); exit; }} 関数に入れ子で関数が使えると見たので中に入れましたが、inputCheck()をlogin()の外に出してみても同じように画面が真っ白になりました。 最初にログインだけ作って動かした際にはログインすることが出来ました。 ログイン状態のチェックが悪いのか関数の使い方が悪いのか、わかりません。 ご教授いただければ幸いです。

    • ベストアンサー
    • 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
  • phpのindexについて

    よくわかるphpの教科書という参考書を読んで掲示板やログイン方法などを学んでいるのですが、sampleというフォルダの中にindex.phpとlogin.phpがあります。 普通でしたらindex.phpが先に開かれると思いますがここではなぜかsampleというフォルダを開くとlogin.phpにアクセスし、そのページでログイン処理をするとindex.phpにページが変わります。 これはいったいどのようにやるのでしょうか。 かなり初歩的な質問だと思いますがお時間のあるときに回答していただけると幸いです。

    • ベストアンサー
    • PHP
  • PHPを使ってWikiにログインしてアクセスしたい

    PHPを使ってWikiにアクセスしたいと考えています。 wikiのapi.phpを使ってアクセスして、記事の削除をしようとしたところ loginの部分でエラーが帰ってきてしまいました。 1回目のログインでtokenをとってきて、2回目にtokenを渡すところで sessionが変わってしまってうまくログイン処理ができません。 ページの削除までの流れを教えていただけないでしょうか。

    • 締切済み
    • PHP
  • PHPのログイン処理について

    PHPのログイン処理について教えてください。 「login_auth.phpファイル」 <?php //session開始 session_start(); session_regenerate_id(true); //エラーメッセージを格納する変数を初期化 $error_message=""; //ログインボタンが押されたかを確認 if(isset($_post["sub"])){ if($_post["auth_id"] == "auth" && $_post["auth_pass"] == "1234"){ //ログインが成功した証拠をセッションに保持する $_session["login_name"] = $_post["auth_id"]; //管理者トップへWebブラウザをリダイレクトさせる $login_url = "http://{$_server["http_host"]}/reservation/auth_top.php"; header("Location: {$login_url}"); exit; } $error_message = "IDかPASSが間違えています"; } ?> <html> <body> <?php if($error_message){ print '<font color="red">'.$error_message.'</font>'; } ?> <center> <hr size="2" color="blue" width="50%"><br><br> <font size="4"><b>管理者認証画面</b></font> <br><br><hr size="2" color="blue" width="50%"><br><br> ユーザID/パスワードを入力してください。 <form action="login_auth.php" method="post"> <table border="2"> <tr> <td bgcolor="cyan">ユーザID</td> <td><input type="text" name="auth_id" value=""></td> </tr> <tr> <td bgcolor="cyan">パスワード</td> <td><input type="password" name="auth_pass" value=""></td> </tr> </table> <input type="submit" name="sub" value="ログイン"> </form> <a href="javascript:window.close();" target=_parent>閉じる</a> </center> </body> </html> 「auth_top.phpファイル」 <?php //セッションを開始する session_start(); //ログインが成功した証拠である変数のチェックを行なう if (!isset($_SESSION["login_name"])) { //変数に値がセットされていない場合は不正な処理とみなし、ブラウザをログイン画面へリダイレクトさせます $no_login_url ="http://{$_server["http_host"]}/reservation/login_auth.php"; header("Location: {$no_login_url}"); exit; } ?> 管理者画面です。 この簡単なプログラムなんですが、IDとPASSを入力しても画面が切り替わりません。 今、そこで行き詰っています。 どなたか教えていただけないでしょうか??

    • 締切済み
    • PHP
  • php ログインについて

    php ログインについて phpでログイン画面を作っているのですがログインできません。エラー等々もでず、「スタッフコードかパスワードが違います」になります。ちなみにDBにはスタッフのデータはしっかり存在します。 コードとパスワードを正しく入力しているにもかかわらずログインできません。 ソースはこちらです [staff_login.php] <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>ログイン</title> </head> <body> スタッフログイン<br/> <br/> <form method="post" action="staff_login_check.php"> スタッフコード<br/> <input type="text" name="code"><br/> パスワード<br/> <input type="password" name="pass"><br/> <br/> <input type="submit" value="ログイン"> </form> </body> </html> [staff_login_check.php] <?php try { $staff_code=$_POST['code']; $staff_pass=$_POST['pass']; $staff_code=htmlspecialchars($staff_code); $staff_pass=htmlspecialchars($staff_pass); $staff_pass=md5($staff_pass); $dsn='mysql:dbname=*****;host=********'; $user='*********'; $password='********'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql='SELECT name FROM mst_staff WHERE code=? AND password=?'; $stmt=$dbh->prepare($sql); $data[]=$staff_code; $data[]=$staff_pass; $stmt->execute($data); $dbh = null; $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { print'スタッフコードかパスワードが違います<br/>'; print'<a href="staff_login.html">戻る</a>'; } else { header('Location: staff_top.php'); } } catch(Exception $e) { print'エラーが発生しました'; exit(); } ?> 解決方法、ご指摘ございましたら教えていただきたいです。

    • ベストアンサー
    • PHP
  • .htaccess でログインチェック

    HTMLファイルをログインユーザーでないと閲覧できない仕組みを作ろうと思っております。 方法として .htaceess ファイルを用いて ログインチェックするPHPを起動し、そのPHP経由で HTMLを表示させようと思っています。 しかしうまく動作してくれません… 下記の記述に何か誤りがありますでしょうか? ※ .htaccess --------------- Action text/html /PATH/login_chk.php ---------------------------- ※ login_chk.php --------------- <? $login = 'ok'; if( $login == 'ok' ){ echo file_get_contents('index.html'); } ?> ---------------------------- (1)index.html にアクセス (2).htaccessからlogin_chk.phpが呼ばれる (3)login_chk.php で file_get_contents関数を用いて index.html が表示される となる予定なのですが、 「The requested URL /PATH/login_chk.php/index.html was not found on this server.」 というエラーメッセージが表示されます… ご回答宜しくお願い致し

    • ベストアンサー
    • PHP
  • ログイン後に次の画面に遷移する方法

    ログイン画面がlogin.php メニュー画面がindex.php となっています。 現在、index.phpに遷移した後にログインしているかどうかのチェックを行い、ログインしていない場合はlocationでlogin.phpに遷移しています。 login.phpでログインというボタンを押すと、またindex.phpが呼ばれ、ログインチェックを行うというやり方ですが、 今のままではログイン画面しか表示できません。 何かよい方法はないでしょうか?

    • ベストアンサー
    • PHP