• 締切済み

SESSION の受け渡し

初心者ですので、見当違いの質問の場合はご容赦ください login.php(ユーザ認証) cart.php(ショッピングカート) という構成でSESSION変数の受け渡しを行いたいのですが login.php で認証確認後、 session_start(); $_SESSION['su_id'] = $u_id ; $_SESSION['su_name'] = $u_name ; のように設定の上 require "./cart.php"; でcart.phpを呼び出し(?)ています require直後のcart.phpの初期状態では $_SESSION['su_id'] 、$_SESSION['su_name']ともに正しく表示しますが submit等(次ページ表示などで)で再表示を行うと $_SESSION['su_id'] 、$_SESSION['su_name']が引き継がれません cart.phpにおける session_start()時に、新しいIDに置き換わっているからだと思いますが このようなケースではどういう処置を行えばよいのでしょうか? 幼稚な質問かどうかすら判断できていないのですが コメントを頂ければ助かります よろしくお願いします

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

みんなの回答

noname#129900
noname#129900
回答No.2

require "./cart.php"; これはどこに書かれているのですか? 例えば、main.php(認証後のページ)の中でrequire "./cart.php";しているならわかります。 (説明では、cart.phpの中で、cart.phpをrequireする様に捉えられます) 以下を参考に、画面遷移を見直してください。 // login.php *session_start() *フォームにIDやパスワードを入力 *認証処理 *【成功】セッション情報を登録、新しいsession_idを発行、main.phpへリダイレクト *【失敗】送信情報をクリアする為に、login.phpへリダイレクト // main.php *session_start() *セッション情報チェック、不正:logout.phpへリダイレクト *require "./cart.php"; *$ca = new Cart( セッション情報 ); //カートクラスのインスタンス生成 *$ca->show(), $ca->add(), $c->del(), $ca->edit() etc. *商品表示とか色々なコンテンツ表示 // cart.php * class Cart カート自体を作成したり、アイテムを追加削除編集したりするクラス * function __construct( セッション情報 ) * function show(), add(), del(), edit() etc. // logout.php *session_start() *セッション破棄 *login.phpへリダイレクト

参考URL:
http://www.php.net/manual/ja/ref.session.php
GONZO1980
質問者

お礼

回答いただき、ありがとうございます > require "./cart.php"; > これはどこに書かれているのですか? > 例えば、main.php(認証後のページ)の中でrequire "./cart.php";しているならわかります。 > (説明では、cart.phpの中で、cart.phpをrequireする様に捉えられます) 説明が曖昧でした login.phpの中で、認証確認直後に記述しています ご指摘のサンプルを参考にさせて頂いていますが、現cart.phpの機能をmainと分散化する事になるのですよね・・

回答No.1

こんばんは。 質問文からだと、session_idが変わってしまう原因は分かりませんね・・・。 どうしてもsession_idが引き継げないような場合は、 自分でsession_idを設定して、毎回同じsession_idでsession_startすればいいです。 cookieが使える場合は、普通に引き継いでくると思うんですが・・・。

GONZO1980
質問者

お礼

回答いただき、ありがとうございます 現処理のすべてのsession_startの直前で session_id( "abcdefghijklmn" ); を記述すれば良いのでしょうか?

関連するQ&A

  • PHPでセッションを使った受け渡しについて

    PHPでECサイトのカート機能を作っています。 まず商品一覧画面(index.php)にデータベースから読み取ったidとNAME、そして個数、サイズ、包装の有無のセレクトボックスを表示します。 それぞれの商品の追加ボタンを押すとカートのphp(t_cart.php)に飛んで上記の情報を全て表示できるようにしたいのですが、idとNAMEと個数の情報は受け渡せるのですが、サイズや包装の有無は別の商品を追加すると全ての商品の情報が上書きされてしまいます。 コードの一部を記載しておきます。 まだPHPを始めたばかりで初歩的な事がわからないのですが、ぜひ御知恵をお貸しいただければとおもいます。 よろしくお願いします。 ・index.php <table> <?php foreach ($Menu as $g) { ?> <tr> <td> <p class="Menu"><?php echo $g['id'] ?></p> </td> <td> <p><?php echo $g['NAME'] ?></p> </td> <form action="t_cart.php" method="post"> <td> <a>個数:</a> <select name="num"> <?php for ($i = 1; $i <= 10; $i++) { echo "<option>$i</option>"; } ?> </select> </td> <td> <a>サイズ:</a> <select name="size"> <option>S</option><option>M</option><option>L</option> </select> </td> <td> <a>包装:</a> <select name="deco"> <option>有</option><option>無</option> </select> </td> <td> <input type="text" name="id" value="<?php echo $g['id'] ?>"> <input type="submit" name="submit" value="go to cart"> </td> </form> </tr> <?php } ?> </table> ・t_cart.php <?php require 'common.php'; $rows = array(); $sum = 0; $pdo = connect(); if (!isset($_SESSION['cart'])){ $_SESSION['cart'] = array(); } if (@$_POST['submit']) { @$_SESSION['cart'][$_POST['id']] += $_POST['num']; } foreach($_SESSION['cart'] as $id => $num) { $st = $pdo->prepare("SELECT * FROM Menu WHERE id=?"); $st->execute(array($id)); $row = $st->fetch(); $st->closeCursor(); $row['num'] = strip_tags($num); $row['size'] = $_POST['size']; $row['deco'] = $_POST['dough']; $rows[] = $row; } ?>

    • 締切済み
    • PHP
  • PHPのセッションについて

    PHPのセッションについて 現在ログインフォームを作成しているのですが、 ログインフォームからIDとパスワードを送信して、合っていれば セッションを発行してロケーションで飛ばそうと思っているのですが、 初回時にIDとパスワードを入力して送信しても、セッションが引き継がれず 2回目以降だとセッションが引き継がれる症状に悩んでおります。 どなたかご教授ください。 宜しくお願いいたします。 【login.php】-------------------------------- <?php session_name("stock"); session_start(); $error_flag = 0; if(isset($_POST["login"])){ $id = htmlentities($_POST["id"],ENT_COMPAT); $password = trim(htmlentities($_POST["password"],ENT_COMPAT)); if($login_id == $id && $login_pass == $password){ $_SESSION["id"] = $id; $_SESSION["password"] = $password; header("Location:stock.php"); exit; }else{ $error_flag = 1; } } echo <<<EOD <form method="post" action="login.php" id="login"> <input type="text" name="id" id="id" > <input type="password" name="password" id="password"> <input type="submit" name="login" value="ログイン" /> </form> EOD; 【stock.php】--------------------------------- <?php session_name("stock"); session_start(); echo $_SESSION["id"]; echo $_SESSION["password"]; ?>

    • ベストアンサー
    • PHP
  • SESSION受け渡し

    SESSION受け渡し 毎回大変お世話になっております。 PHP初心者なので、変な質問になっているかもしれないのですが、どうか分かる方はお付き合いください。 環境 PHP 文字コード:Shift-JIS SESSION01.php から SESSION02.php へSESSIONを受け渡した場合、統一されるはずのSESSION変数($_SESSION["name"])が2つ作成されてしまい、別々の変数として扱われてしまいます。 ・ソース SESSION01.php(SESSION送信側) <?php session_start(); $_SESSION["name"] = "1"; echo $_SESSION["name"];  ←変数の中身は[1] ?> SESSION02.php(SESSION受信側) <?php session_start(); echo $_SESSION["name"]; ←変数の中身は何も無し ?> ・SESSIONのディレクトリ sess_eo683vtfgl5qk6d2o31ghcjpn7     1KB sess_nq1cikn5uhdlnc9uvii6b8l281     0KB SESSION変数($_SESSION["name"])をSESSION01.phpとSESSION02.phpの両方で同じ変数として扱いたいのですが、別々の変数の様な扱いになっております。 なぜSESSION変数が統一されていないか分かる方がいらっしゃいましたら、どうかご意見をお聞かせください。

    • 締切済み
    • PHP
  • セッションにIDを振って値を代入

    PHP初心者です。 PHP4.2.xを使っています。 ショッピングカートで購入した商品データをセッションで維持してカートに追加する機能部分を作っていますがうまくいきません。 コードは以下のとおりです。 【goods.php】 ----------------------------------------------------------- <? session_start(); ?> ■商品1 <form action="cart.php" method="POST"> <input type="hidden" name="id" value="1" /> <input name="num" type="text" /> <INPUT type=submit value="カートに追加"> </form> ■商品1 <form action="cart.php" method="POST"> <input type="hidden" name="id" value="2" /> <input name="num" type="text" /> <INPUT type=submit value="カートに追加"> </form> ----------------------------------------------------------- 【cart.php】 ----------------------------------------------------------- <? session_start(); if($_POST['id'] != ""){ $id = $_POST['id']; $num = $_POST['num']; // セッション名自体をIDで作っています。中身は個数のみです。 $_SESSION["$id"] = $num; } echo "カートに入ってる商品<br />"; for ($i = 0; $i<=100; $i++) { if (!empty($_SESSION["$i"])){ echo $_SESSION["$i"]. "<br>\n"; } } ?> ----------------------------------------------------------- goods.phpのファイルで商品1と商品2を1つずつカートに入れれば cart.phpのページで 1 1 と表示されるはずが、1しか出ません。 $_SESSION["1"] $_SESSION["2"]の中身が表示される予定でしたがそうならず、 そのときPOSTで投げられたIDしか$_SESSION["$id"]に保持されません。 どうすればどんどん商品をカートに追加できますでしょうか? アドバイスのほどどうぞよろしくお願いします!

    • ベストアンサー
    • PHP
  • セッション

    セッションについて教えて下さい。 指定のID、パスワードでログインしようと思っています。 ソースを記載しますので、お教え下さい。 ID:aaa パスワード:111とします。 [送り側フォーム] <form action="/test2.asp" method="POST" id=form1 name=form1> <input type="text" name="id" value=""><br> <input type="password" name="passwd" value=""> <input type="submit" value="LOGIN" id=submit1 name=submit1> </form> とし、 [受け取り側、認証 test2.asp ] <% If Session("user_test") <> "1" Then Response.Redirect "/test.asp" Response.End() End If %>ここで認証を判断し、認証できなければtest.aspへもどるとし、 Dim id, passwd id = Request.Form("id") passwd = Request.Form("passwd") Session("user_login") = "id" Session("user_login") = "passwd" IF id = "aaa" and passwd = "111" THEN Session("user_test") = 1 Response.Write ("OK") ELSE Response.Write ("ちがうよ") END IF %> ID、パスワードをセッション変数にいれ、各ページで認証すると言う事をやりたいのですが、うまくいきません。 どこがわるいか、お教え下さい。 ※以前にも似たような質問をしているのですが、改善されずお手上げです。

  • session_startについて

    初心者です。 以下のように、ログイン時、設定画面adminpage.htmlに行くように作っています。 sakuraインターネットでは動くのですが、 もう一方の違うサーバーでは、login.phpに戻ってきてしまいます。 原因が判りません。 手がかりが欲しいのですが、 お詳しい方がおられましたら教えてください。 よろしくお願い致します。 <?php require("MySmarty.class.php"); require('Settings.class.php'); $smarty = new MySmarty(); $settings = new Settings; session_start(); $id = $_SESSION['id']; $pass = $_SESSION['pass']; //idとパスワードに不具合有れば、login.phpへ戻る。 if( ( $id == '' ) || ( !$settings->isValidUser($id,$pass) ) ){ header("Location: login.php" ); print $_SESSION["id"]; print $_SESSION["pass"]; print $id; print $pass; exit; } $settings->loadSettings(); $smarty->assign('maintitle', $settings->maintitle); $smarty->assign('subtitle', $settings->subtitle); $smarty->assign('error_message', $settings->errorm); $smarty->display('adminpage.html'); ?>

    • ベストアンサー
    • PHP
  • セッションについて教えてください。

    PHPを独学で勉強中の初心者です。(HTMLとCSSくらいしか分からない所からのスタートです) ログインフォーム→パスワード処理→コンテンツ表示というながれで作っています。 質問は、セッションの有効期限はデフォルトではブラウザを閉じるまでと聞いたのですが、それはウインドウを閉じるではなく、アプリケーションを終了するまでということでよいのでしょうか?ウインドウを閉じただけだと、コンテンツを表示できてしまいます。 また、コードがこんなんでよいものかアドバイスよろしくお願い致します。 --パスワード処理-- <?php session_start(); $id =p; $password =11; $n_id = $_POST["n_id"]; $n_password = $_POST["n_password"]; if(($n_id == $id ) && ($n_password == $password)){ $_SESSION['pass'] = 1; header("Location: page1.php"); }else{echo "IDまたはパスワードが違います。"; } ?> ----コンテンツページ----- <?php session_start(); if(isset($_SESSION["pass"]) && $_SESSION["pass"] == 1){ echo "コンテンツ"; echo "<html><head> <meta http-equiv=Content-type content=text/html; charset=EUC-JP> </head><body>"; echo "<form action =logout.php method=post>"; echo "<input type=submit name=sbm value=ログアウト>"; echo "</form></body></html>"; }else{ header("Location:login1.php"); } ?>

    • 締切済み
    • PHP
  • セッションについて

    PHPのセッションについてご教授ください。 session_start()の前でセッション名の変更を行うと、セッションidが受け渡されず、次ページが新規セッションとなってしまいます。クッキーを使った解決法を探してます。 セッション名を変更した場合、どのように解決すればよいでしょうか。初心者なのですが、一生懸命勉強中なので、宜しくお願いします。 開発環境: apache2.2 php 5.2 ページ1ソース <?php function main(){ session_name('member'); <= この行をコメントアウトすると、受け渡しできます session_start(); $_SESSION['test'] = 'test'; } main(); ?> <a href="sesstest2.php">test</a> ページ2ソース <?php session_start(); echo $_SESSION['test']; ?>

    • ベストアンサー
    • PHP
  • セッションの変数の受渡しについて

    よろしくお願いします。 セッションを利用して変数受渡しを行おうと思い、初めての試み なので簡単なものを作ってやってみたのですが、変数に値をセットしたtest.phpでは値が表示されますが、リンク先のtest2.phpでは表示されません。 以下のソースで試しています。 -------------------------------------------------- test.php <?php session_start(); session_register("aa"); $_SESSION['aa'] = 1234; print $_SESSION['aa']; print "<p>"; print "<a href='test2.php'>next</a>";←ここの画面では表示されます。 ?> test2.php <?php session_start(); print $_SESSION['aa'];←表示されません ?> ---------------------------------------------- 想定では画面に”1234”と出ると思っていたんですが・・。 他質問をみて真似て色々試したのですが、やはり表示できませんでした。 環境は以下です apache2 php ver4.4.4 session Session Support enabled Registered save handlers files user Directive Local Value Master Value session.auto_start Off Off session.bug_compat_42 On On session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_divisor 100 100 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path c:\windows\Temp c:\windows\Temp session.serialize_handler php php session.use_cookies Off Off session.use_only_cookies On On session.use_trans_sid On On 環境の問題でしょうか?各ブラウザで試したのですが、ダメでした。 初歩的質問で申し訳ありませんが、ご教示よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP セッションの受け渡し失敗 IEはOK

    PHP セッションの受け渡し失敗 IEはOK いつもお世話になっております。 phpで3つのページに渡りデータを引き渡したいのですが、 ブラウザによって成功したり失敗したりしています。 成功・・・IE 失敗・・・GoogleChrome,Firefox,safari,opera a.html(charset=UTF-8) ⇒ b.php(charset=shift_jis) ⇒ c.php(charset=shift_jis)という流れです。 a.html hiddenでpost送信 b.php postデータをsessionへ格納 c.php echoしても表示されない という感じです。 ちなみに、b.phpで格納したセッションデータはc.phpでechoできます。 「a.html」 <form action="b.php" method="post" target="_top">   <input type="hidden" name="cp_name" value="あああ株式会社"> </form> 「b.php」 session_start(); $_SESSION["cp_name"] = mb_convert_encoding($_POST["cp_name"], 'Shift_JIS', 'UTF-8'); 「c.php」 session_start(); echo "[ 販売元 : ".$_SESSION["cp_name"]." ]"; 表示失敗 どなたかご教授頂ければと思います。 何卒宜しくお願い申し上げます。

    • 締切済み
    • PHP

専門家に質問してみよう