• ベストアンサー

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
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
回答No.3

セッション情報はサーバ内にセッションID(クライアント側に配布されているID)と紐づけられて保管されています。 データの保管場所は session.save_path で指定されたところです。session.save_pathはphp.iniや.htaccess等で指定可能です。例えばLinuxの場合は/tmpや/var/lib/php5/sessionと言うような場所が初期設定されています。 データはsess_セッションIDのようなファイル名でhoge|a:6:{s:5:"login";i:1;s:3:"adm";}のような形で保管されています。セッションに登録されたデータがファイルとして自動的に保管されます。 セッションIDはURLに埋込まれてGET変数(sid=セッションID)で渡すか、クッキーに格納されるかのどちらかです。セッションIDはユニークキーが自動的に作成されて割り当てられます。 参考まで。

abesouri
質問者

お礼

有難うございました。

その他の回答 (2)

  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

sessionにはセッションIDと実体の二つがあるのがキモです。 クライアントとサーバ間のやり取りでセッションIDをクッキーでやり取りし、 サーバ側はセッションIDを元に実体(値)を取り出します。 phpのディフォルトでは/var/lib/php/sessionあたりにファイルがあるかと思います。 php.iniのsession.save_pathを参照してください。

abesouri
質問者

お礼

有難うございました。

回答No.1

セッションは、クッキーかURLに埋め込みされます。私も昔にやったことなのであまり詳しく正確にはかけませんが、上記のことは本当です。 たしか、PHPには、セッションでクッキーを使うか使わないかをきめられる関数も存在したはずです。 http://oku.edu.mie-u.ac.jp/~okumura/php/session.php Webで調べるといろいろとわかるとはおもいますが。。 がんばってください。

abesouri
質問者

お礼

有難うございました。

関連するQ&A

  • ++の意味が分かりません

    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> //////////////////////////////////////////////////////// とありますが、++$_SESSION['movies'];の ++の意味が分かりません。 数値を追加しろという意味ですか。

    • ベストアンサー
    • 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
  • php $_SESSIONでデータが残らない。

    いつもお世話になり誠にありがとうございます。 標記の件。 インプット画面ー>確認画面ー>戻るー>インプット画面 インプット画面に戻った時、どうしても最初のインプット画面で打った内容が消えてしまいます。 プログラムを診て、誤りを指摘して頂けないでしょうか? 今度はCSSなども書きます。 どうぞよろしくお願い致します。 記 <?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> <meta charset="utf-8"> <meta http-equiv="content-type" content="text/html" charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>ブログ</title> <meta name="description" content="このWebサイトは、初めてHTMLで作るブログページです。"> <link rel="stylesheet" href="./css/style.css"> <style> body{ width: 100%; max-width: 800px; margin-top: auto; margin-left: auto; margin-right: auto; background-color: rgb(71, 133, 157); padding: 10px; text-align: center; } div{ background-color: rgb(247, 248, 245); padding: 2em; } script{ margin-top: 12em; } p { margin-left: 2em; text-align: left; font-size: 25px; font-weight: bold; color: rgb(10, 10, 10); } form { font-size: 25px; font-weight: bold; color: blue; } input { font-size: 25px; margin:auto; } </style> </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
  • セッションについて

    PHP初心者です。 今、セッションについて勉強しています。 名前を入力してログインすると次のページに名前が表示するようにしたいのですが、表示されません。どうしたらよいでしょうか? ソース(ログインページ) <? session_start();// セッション管理の開始 session_register("namae1");//現在のセッションに1つ以上の変数を登録する ?> <? header("Content-type: text/html;charset=EUC_JP"); ?> <html><head><title>ログイン</title></head> <form action="sessiontop.php" method="post"> 名前: <input type="text" name="namae"><br><br> <input type="submit" value="ログイン"> </form> </body></html> ソース(名前が表示されるページ) <? session_start();// セッション管理の開始 header("Content-type: text/html;charset=EUC_JP"); //ディレクトリー内に入っているHTMLファイルは全てEUC-JPですという命令がブラウザに送信される。 ?> <html> <head> <title>セッションメインページ</title></head> <? $name = $_POST["namae"]; $_SESSION["s_name"]=$name; ?> <?= $s_name ?>さんこんにちわ<br><br> <a href="session3.php">ログイン画面に戻る</a><br> </body></html> よろしくお願いします。

    • ベストアンサー
    • PHP
  • postのタイムラグ

    以下のソースでPOSTの値が取れないときがあるので困っています。 具体的にはページを表示してから30秒程度待ってからの クリックじゃないとPOSTの値が取れません。 GETの場合はページ表示後すぐにボタンをクリックしても大丈夫でした。 原因が分からず途方に暮れています。 お知恵をお貸しください。 PHP Version 5.2.3 <?php $P_data = $_POST["pg"]; print("POST=>".$P_data."<BR>"); $G_data = $_GET["pg"]; print("GET=>".$G_data."<BR>"); print <<< DOC_END <html> <head> </head> <body> DOC_END; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=1>"; echo"<input type=submit value=あ>"; echo"</form>"; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=2>"; echo"<input type=submit value=い>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=3>"; echo"<input type=submit value=う>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=4>"; echo"<input type=submit value=え>"; echo"</form>"; print <<< END </body> </html> END; ?>

    • 締切済み
    • PHP
  • $_SESSION['submit']の自動生成

    <form>タグの中にあるsubmitボタンをクリックすると、post先の.phpに、$_SESSION['submit']変数が自動生成されると聞いたので、テストプログラムを作ってみましたが、自動生成されません。 具体的には、test02.phpのprint_r($_SESSION);において、何も表示されません。 つまり、$_SESSION['submit']が作られていません。 詳しい方、ご教授をおねがいします。 test01.phpのソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <?php session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>test01</title> </head> <body> <?php print <<< EOH1 <form action="test02.php" method="post" name="form1"> <table> <tr> <td>会社名</td> <td> <input type="text" name="company" size="30" value="東京電気株式会社"> </td> </tr> </table> <br> <input type="submit" value="登録" name="submit">&nbsp;<input type="reset"> </form> EOH1; ?> </body> </html> test02.phpのソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <?php session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>test02</title> </head> <body> <?php print_r($_SESSION); if(isset($_SESSION['submit'])) { dispRequest(); } if(isset($_SESSION['submit'])) { unset($_SESSION['submit']); session_unset(); session_write_close(); } function dispRequest() { if (isset($_REQUEST['company'])) { echo "会社名:", $_REQUEST['company'], "<br>\n"; } else { echo "companyが未定義<br>\n"; } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • ファイル間のデータの受け渡しについて hidden? session?

    1.php (フォームを表示) 2.php (入力内容の確認ページ) 3.php (最後のページ、送られた値を使用し、メール送信やデータベースに書き込むなどの処理をしたい。) とhiddenを使い、3つのファイルを作成しました。 ファイル"1.php" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title></title> </head> <body> <form action="2.php" method="post"> <input type="text" name="data1" value="データその1"> <input type="hidden" name="data2" value="隠しデータ"> <input type="submit" name="" value="送信"> </form> </body> </html> ファイル"2.php" <?php echo "<h1>確認ページ</h1>"; echo $_POST[data1]."<BR>"; echo $_POST[data2]; print<<<_HOGE_ <form action="3.php" method="post"> <input type="hidden" name="data1" value="$_POST[data1]"> <input type="hidden" name="data2" value="$_POST[data2]"> <input type="submit" name="" value="送信"> </form> _HOGE_; ?> ファイル"3.php" <?php echo $_POST[data1]."<BR>"; echo $_POST[data2]; ?> 2.phpの(入力内容の確認ページ)を見ているときに、他の人が2.phpにアクセスして入力内容を盗み見る事は出来るのでしょうか? (2.phpに直接アクセス出来ないように、リダイレクト処理はするつもりですが。) 2.phpから3.phpに値を渡す場合、このようなhiddenの使い方は間違っていますか? セッションを使った方が良いのでしょうか?

    • ベストアンサー
    • PHP
  • ページ時のセッション保持

    似たような質問は他にもたくさんあったんですが、どうも肝心の部分が違っていたので新規で失礼します。 http://oshiete1.goo.ne.jp/qa3102414.html ↑ここを参考にlist.phpというファイルを作りました。 【list.php】 session_start(); $thisphp = "list.php"; $key = 'page'; $child = 'ss'; if( array_key_exists($key,$_GET) ){ $no = $_GET[$key]; readfile("$child$no.php");} else{for( $i=1; $i<=2; $i++){ $no = "00$i"; echo "\n<a href='$thisphp?$key=$no'>子ページ($thisphp?$key=$no)</a><br>";}} list.phpを見る前に、まずsubmit.phpでセッションに格納する情報を登録して頂くんですが…。 【submit.php】 <?php session_start(); $_SESSION["name1"] = $_POST['name1']; $_SESSION["name2"] = $_POST['name2']; $thisphp = "submit.php"; ?> <form method="POST" action="<?php echo $thisphp;?>"> name1:<input type="text" name="name1" size="10" maxlength="10"> name2:<input type="text" name="name2" size="10" maxlength="10"> <input type="submit" name="submit" value="登録"></form> 全体の処理の順序は ●submit.phpで情報を登録してlist.phpへ移動。 ●list.phpに表示されている子ページへ移動。 ●子ページ(list.php?page=001など)で、submit.phpで登録した情報を表示する。 というものです。 その子ページの内容は <?php session_start(); ?><html><body> <?php echo $_SESSION["name2"];?> </body></html> というものなのですが、この子ページでだけセッションの情報が反映されません。 『<?php echo $_SESSION["name2"];?>』がソースにもろに表示されている状態です。 説明が解りにくければ追記致します。 改善策が思い当たる方、回答お願いします。

    • ベストアンサー
    • PHP
  • hiddenを使ったセッション

    こんにちは。 セッションを使ったデータの受け渡しをしたいのですが、 (携帯を考慮してcookieは使わないやり方で) hiddenにセッションIDを持たせる方法で書いてみたのですが、 うまくいきません。 送られてはいるけど、受け取れていないのかな…? とは思うのですが、対処がわかりません。 以下のソースです。(確認用でGETにしてます) 望むのは、printされたセッションIDとテキスト内のセッションIDが 同一になる(=セッションが保持できてるということですよね?) かつ、submitしても、セッションIDが変わらない、という状況です。 よろしくお願いいたします。 print "Content-type: text/html\n\n"; use CGI; use CGI::Session qw/-ip-match/; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); } else { $query_string = $ENV{'QUERY_STRING'}; } my $cgi = new CGI; CGI::Session->name("session_id"); my $session = new CGI::Session("driver:File", $cgi, {Directory=>'./session'}); $sid = $session->id(); $session->param('value', $sid); $sesid = $session->param('value'); print $sesid."<br>\n"; undef($session); @query = split(/&/, $query_string); foreach $query (@query){ ($name, $data) = split(/=/, $query); $data{$name} = $data; } print <<"EO"; <html><head> <title> </title> </head> <body><hr><hr> <form action="./test.cgi" method="GET"> <input type="hidden" name="session_id" value="$sesid"> <input type="text" name="btn" size="50" value="$data{'session_id'}"><br> <input type="submit" value="submit"><br> </form> <hr><hr></body></html> EO

  • セッションについて教えてください。

    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