• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sessionの扱いがこれで合っているか不安なのですが)

セッションの使い方についての質問

このQ&Aのポイント
  • セッションの扱いに不安があります。
  • URLに示されたサンプルコードのセッション処理を試しています。
  • セッションで値を渡すことはできていますが、正しい使い方かどうか確認したいです。

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

  • ベストアンサー
noname#30334
noname#30334
回答No.1

動作としては問題ないとの事ですが、 PHP Manual(下記参照)によると、あまり良くないようです。 また、$Nameではなく、$_SESSION["Name"]と書くのであれば、 session_register("Name"); は必要ありません。 経験上、内部変数と混同しないためにも $_SESSION[]と書くほうが良いと思いますし、そうでなければ、 $sessNameのようにプレフィックスを付けた方がわかりやすいと思いますよ。 以下「PHP Manual」から引用です。 register_globalsを 考慮することなくスクリプトを書きたい場合には、 $_SESSION配列を 代わりに使用する必要があります。 $_SESSIONのエントリーは自動的に登録されます。 スクリプトでsession_register()を 使用している場合には、 それは register_globalsを 不可としている環境下では動作しません。 $HTTP_SESSION_VARS(または$_SESSION)を 使用する場合、 session_register(), session_is_registered(), session_unregister()を使用しないでください。

litton101
質問者

お礼

tdshさん,ご教示ありがとうございました. マニュアルまで引用いただき恐縮です. >session_register("Name"); >は必要ありません。 というご指導で,早速やめてみましたが 確かにまったく動作に問題ありませんでした・・・ もうしばらくテストを続けようと思います. ありがとうございました.

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

関連するQ&A

  • header(Location: next.php) だとPOSTした値が渡らない?

    文末は(だいぶ端折ってますが), (1) エラーがあればエラー表示, (2) エラーがなければnext.phpに飛ぶ という動作をするのですが, next.php 内に echo $_POST["Name"]; とか echo $_POST["reg"]; とか書いても valueの中身が渡ってきていません. header("Location: next.php"); で飛ばすとだめなのでしょうか. http://oshiete1.goo.ne.jp/qa2706500.html でも,#2さんのアドバイスのようにしようとしましたが, #1さんのご教示のように,セッションを利用するしかないですか? ちょっとセッションで値の渡し方がチンプンカンプンなのですが・・・ <?php session_cache_limiter('none'); session_start(); header("Cache-control:no-cache"); header("Pragma:no-cache"); $errFlg=false; if ( $_POST["reg"] == "" ) $errFlg = true; if ( !$errFlg ) { if ( $_POST["Name"] == "" ) { $errFlg = true; $errStr["Name"] = "未入力"; } } if ( $errFlg ) { ?> <html><body> <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> <?= $errStr["Name"] ?></td> <input type="text" name="Name" value="<?php echo $_POST["Name"]; ?>"> <input type="submit" name="reg" value="登録"></td> </form> </body></html> <?php } else { header("Location: next.php"); } ?>

    • ベストアンサー
    • PHP
  • php $_SESSIONで値が消える。

    いつもお世話になり誠にありがとうございます。 標記の件。 インプット画面ー>確認画面ー>戻るー>インプット画面 インプット画面に戻った時、どうしても最初のインプット画面で打った内容が消えてしまいます。 プログラムを診て、誤りを指摘して頂けないでしょうか? どうぞよろしくお願い致します。           記 <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['email'] = $_POST['email']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['email'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!DOCTYPE html> <html lang="ja"> <head> </head> <body> <div class="v_line_fix"> <h1>Blog K・T</h1> <h2><a href="index.html">トップページ</a></h2> <?php if( $mode=='input'){ ?> <form method=post> お名前(ニックネーム)<br> <input type="text" name="name" value="<?php echo $_SESSION['name'] ?>"><br> Eメール<br> <input type="email" name="email" value="<?php echo $_SESSION['email'] ?>"><br> カテゴリー<br> <input type="text" name="category" value="<?php echo $_SESSION['category'] ?>"><br> 本文<br> <textarea style="font-size:1.5em;" cols="30" rows="80" name="message"><?php echo $_SESSION['message'] ?></textarea><br> <input type="submit" name="confirm" value="確認" /> </form> <?php }else if( $mode=='confirm'){ ?> <!--確認画面--> <form method="post"> <?php echo $_SESSION['name']?><br> <?php echo $_SESSION['email']?><br> <?php echo $_SESSION['category']?><br> <br> <?php echo nl2br($_SESSION['message'])?><br> <input type="submit" name="back" value="戻る"/> <input type="submit" name="send" value="送信"/> } </form> <?php } else { ?> <!--完了画面--> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • sessionが分かりにくいです

    try4.html <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <title>カンタンアンケート</title> </head> <body> <form action='try4-2.php' method='GET'> 性別:<br> <input type="radio" name="gender" value=0>男性 <input type="radio" name="gender" value=1>女性<br><br> 趣味(複数選択可):<br> <input type="checkbox" name="movies" value=1>映画  <input type="checkbox" name="music" value=1>音楽  <input type="checkbox" name="books" value=1>読書  <input type="checkbox" name="sports" value=1>スポーツ<br><br> ご意見をお書きください:<br> <textarea name="comment" rows="4" cols="40"></textarea><br><br> <input type="submit" value="送信"> <input type="reset" value="リセット"><br><br> </form> </body> </html> ////////////////////////////////////////////////////// try4-1.php <?php session_start(); ?> <html> <head><title>try4-1.php</title></head> <body> <?php $_SESSION = array(total_cnt => 0, male => 0, female => 0, movies => 0, music => 0, books => 0, sports => 0, comment => array("")); ?> //////////////////////////////////////////////////////////////// try4-2.php <?php session_start(); ?> <html> <head><title>try4-2.php</title></head> <body> <?php if ($_GET['gender'] == 0) ++$_SESSION['male']; elseif ($_GET['gender'] == 1) ++$_SESSION['female']; if ($_GET['movies']) ++$_SESSION['movies']; if ($_GET['music']) ++$_SESSION['music']; if ($_GET['books']) ++$_SESSION['books']; if ($_GET['sports']) ++$_SESSION['sports']; $_SESSION['comment'][] = $_GET['comment']; ++$_SESSION['total_cnt']; ?> 登録しました。さらに<A href="try4.html">入力する</A><br> これまでの集計結果を<A href="try4-3.php">表示する</A><br> </body> </html> ////////////////////////////////////////////////////////// try4-3.php <?php session_start(); ?> <html> <head><title>try4-3.php</title></head> <body> <?php echo "これまでにアンケートに応えたのは{$_SESSION['total_cnt']}人です。そのうち<br>"; if ($_SESSION['total_cnt']){ $male_rate = (int)($_SESSION['male'] / $_SESSION['total_cnt'] * 100); $female_rate = (int)($_SESSION['female'] / $_SESSION['total_cnt'] * 100); } else { $male_rate = 0; $female_rate = 0; } echo "男性:{$_SESSION['male']}人 $male_rate %<br>"; echo "女性:{$_SESSION['female']}人 $female_rate %<br><br>"; echo "趣味は映画:{$_SESSION['movies']}人、音楽:{$_SESSION['music']}人、読書:{$_SESSION['books']}人、" . "スポーツ:{$_SESSION['sports']}人<br><br>"; echo "意見:<br>"; foreach ($_SESSION['comment'] as $comment) echo $comment . "<br>"; ?> 集計を<A href="try4-1.php">初期化する</A><br> さらに<A href="try4.html">入力する</A><br> </body> </html> //////////////////////////////////////////////////////// とファイルが4つあるのですがセッション情報はどこに格納されているのでしょうか。TXTファイルでもなさそうなので教えて下さい。

    • ベストアンサー
    • PHP
  • セッション機能が使えない

    セッション機能を使って開発していたのですが、どうも思うように動作しないので、書籍に載っていた簡単なプログラムを試してみましたが動作しませんでした。 <書籍のソース> <?php session_name("MYSESS"); session_start(); if(!session_is_registered("access")) { session_register("access"); $access=1; } else { $access++; } ?> <html> <body> <p><?=$access?>回目の訪問です</p> <p><a href="sample.php?<?=SID?>">ここをクリック</a></p> </body> </html> 実行すると、「1回目の訪問です」と出て、クリックしても1回目のままで、増えることがありません。 <php.iniのsessionに関する部分の設定> [Session] session.name=PHPSESSID session.auto_start=1 session.serialize_handler=php session.gc_probability=1 session.gc_divisor=100 session.gc_maxlifetime=1440 session.bug_compat_42=0 session.bug_compat_warn=0 session.cache_limiter=nocache session.cache_expire=180 session.use_trans_sid=0 セッションデータは、ファイルとしては保存されていますが、中を見ると access|N; となっています。 他にもスクリプトを試しましたがすべてこのファイルのデータはNのままで値が保存されることがありません。 お気づきの点がありましたらご指摘をお願いいたします。

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

    今,セッションにはまっています. https://www.stackasterisk.jp/tech/php/php03_06.jsp には、セッションのサンプルもいくつかあるので,まずは,簡単なセッションを使った例を拾ってきて試してみたいと思っています.ですが、上のURLにあるサンプルで <? session_start(); if (!isset($count)) $count=0; session_register("count"); $count++; ?> <html> <body> あなたは <?= $count ?> 回目の訪問です。 <a href="<?echo $PHP_SELF ."?PHPSESSID=". $PHPSESSID?>">カウントを増やす</a> </body> </html> をしましたが,再読込やクリックをしてもカウントアップせず,ずっと1のままです.ソースが間違っているかどうかは私には,ハッキリできませんが,おそらく正しいんでしょう.正常にカウントアップされる為には,php.iniなどの設定も必要でしょうか?どうしてカウントアップされないでしょうか?

    • ベストアンサー
    • PHP
  • クッキーを使わないセッションPHP

    を作ったのですがまずい点があったら教えて下さい 入力を一行ずつ並べるものです <?php session_name('asdsddzddzfssd'); session_start(); session_register('lines'); $self=$_SERVER['PHP_SELF'].'?'.htmlspecialchars(SID); $line=isset($_POST['line'])?htmlspecialchars($_POST['line']):''; if($line!='')$_SESSION['lines'] .= $line.'<br/>'; echo' <form action="'.$self.'" method="post"> <p>1行: <input name="line"/></p> </form> 過去の全行:<br/>'.$_SESSION['lines']; ?>

    • ベストアンサー
    • PHP
  • セッション変数にデータをセットする

    下記のPHPプログラムについて 1 <?php 2 // セッションを開始する 3 session_start(); 4 ?> 5 <html> 6 <head> 7 <title>セッション変数にデータをセットする</title> 8 </head> 9 <body> 10 <?php 11 // セッション変数にデータをセットする 12 if (!isset($_SESSION["name"])) { 13  echo "<p>セッション情報をセットしました"; 14  $_SESSION["name"] = "田中"; 15  } 16 echo "<p>名前:".$_SESSION["name"]; 17  18 // セッション変数にデータをセットする 19 if (!isset($HTTP_SESSION_VARS["name2"])) { 20  echo "<p>セッション情報をセットしました"; 21  $HTTP_SESSION_VARS["name2"] = "高橋"; 22 } 23 echo "<p>名前:".$HTTP_SESSION_VARS["name2"]; 24 25 ?> 26 </body> 27 </html> 実行すると 名前:田中 名前:高橋 となるのですが、なぜ13行目、20行目のecho文の内容が出力されないのか不思議です。 echo文の内容が表示がされない理由ついて教えてください。 よろしくお願いします!

    • ベストアンサー
    • PHP
  • 悪戦苦闘PHP セッション変数

    毎日悪戦苦闘しながらすごしずつプログラムができるようになって来ました。今越えられないで困っている問題がありまして、ご教授していただきたくて投稿しました。下のようなプログラムを実行しますと Warning: session_register() [function.session-register]: Cannot send session cookie - headers already sent by (output started at C:\Apache Group\Apache2\htdocs\sample\test.php:3) in C:\Apache Group\Apache2\htdocs\sample\test.php on line 30 となってしまいます。なぜか昨日は上手く行っていたのですが、今日こんなエラーがでて解決できないでいます。ためしにtmpに保存されていたセッションファイルを削除してみたりしたのですがだめでした。原因が分かる方是非ご教授お願いいたします。 <?php //セッション変数の保存フォルダのパス session_save_path("C:/Apache Group/Apache2/htdocs/sample/tmp"); if(isset($_POST[simei]) and isset($_POST[pass])){ $con=sqlite_open("../SQLiteManager/php_db"); $sql = "select * from **** where **** = '$_POST[****]' and **** = '$_POST[*****]'"; $result = sqlite_query($con,$sql); $row = sqlite_num_rows($result); if($row==0){ $not= "正しくありません"; } else{ //////////セッション変数設定//////////// session_start(); session_register("simeix","passx"); $_SESSION[simeix]=$_POST[simei]; $_SESSION[passx]=$_POST[pass]; //////////////////////////////////////// header("location: abcdefg.php"); exit(); } } else{ echo "ハンドルネーム、パスワードを入力してください。"; } ?> <html> <body> <div id=a> <table><tr><td><font color="#ffffff"> <B>ログイン</b></font></td> </tr> <tr><td> <form action="acntop.php" method="post"> <font color="#ffffff">HDネーム:</font><input type="text" name="simei"value="" > <font color="#ffffff">パスワード:</font><input type="password" name="pass" value=""> <input type="submit" value="送信"> </form> </td> </tr></table> <?=$not;?> </div> </body> </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のセッションについて。

    <?php if(isset($_POST['cmdSubmit'])){ session_start(); $user = $_POST['user_name']; $_SESSION['user_name'] = $user;  header('Location:./test.php'); } ?> アンケートフォームの内容をセッションに入れて 別ページで <?echo $_SESSION['user_name'];?> という感じで出力させたいのですがうまく行きません。 セッションに登録されているかチェックするために 移動する前にecho $_SESSION['user_name']; で内容が表示されるかどうか確認したのですが そのときは問題なく内容が表示されるので、 headerで他のページに移動する前までは問題なさそうだと思います。 なにかアドバイスいただけたらとおもいます。 よろしくおねがいします。

    • ベストアンサー
    • PHP