PHPでセッション管理の勉強をしています

このQ&Aのポイント
  • PHPでセッション管理の方法について学習中です。テストにおいて、カウント2回の表示は正常に行われますが、3回目以降も同じメッセージが表示されます。問題の所在を調べたいです。また、このセッション管理は携帯電話でも利用できるのでしょうか?
  • MySQLバージョン4.0.26とPHPバージョン4.2.2を使用しています。セッション変数をテストしています。
  • セッション変数を使用したPHPのプログラムで、訪問回数をカウントする処理があります。初めての訪問時には『はじめての訪問です。セッション変数にデータがありません。このページをリロードしてください。』と表示され、2回目以降は『あなたの訪問は回目です。』と表示されます。
回答を見る
  • ベストアンサー

PHPでセッション管理

PHPでセッション管理の勉強をしています、 テストに以下の文章があるのですが カウント2回です は表示するのですが 3回目以降も カウント2回です と表示します。 文章がどこかおかしいでしょうか? また、このセッション管理は携帯電話でも有効なのでしょうか? スミマセン、教えてください。 バージョンは MYSQL ver4.0.26 PHP ver4.2.2 です <?php session_start(); $count = 1; if (isset($_SESSION["count"])) { $count = $_SESSION["count"]; $count++; } $_SESSION["count"] = $count; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>セッション変数のテスト</title> </head> <body> セッション変数のテスト<BR> <BR> <?php if ($count == 1) { ?> はじめての訪問です。<BR> <BR> セッション変数にデータがありません。<BR> このページをリロードしてください。<BR> <?php } else { ?> あなたの訪問は<?=$count?>回目です。<BR> <?php } ?> </body> </html>

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

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 私の環境では3回目以降のカウントもカウントされます。 また携帯電話の場合、このスクリプトですと クッキーに対応した携帯電話のみ対応します。 クッキーに対応しない携帯電話の場合は、セッションIDを URLに付加してあげないと動作してくれません。

kiyomidesuyo
質問者

お礼

ご回答ありがとうございました。 友人のPCでもちゃんと動いていました、 私のPC特有の症状なのだろうと思い 検証をあきらめました。 お手を煩わせたのにスミマセンでした。

kiyomidesuyo
質問者

補足

いつもスミマセン。 私は他のPCで動作させても、2回目で止まってしまいます。 WinXP pro sp2 IE 6.029 でテストしています。 **ノートンが入ってますが止めても同じです、 何か環境の問題なのでしょうか? それより、セッションを使って携帯電話で ここのマイページのように IDとpass を入れさせて、その個人固有のページにアクセスする と言うのは可能なのでしょうか? まだ、遠いですが目指しているのはそこなのです。。。 ID を付加させれば大丈夫だとアドバイスを頂きましたが、 参考になるようなHP、参考書などあれば教えて下さい。 何度もスミマセンが、宜しくお願いいたします。

関連するQ&A

  • 古いセッションが消えない

    フォームからのデータを受け取るPHP、sesssion.phpが下記のとおりだとします。 <? header('Cache-Control: nostore, no-cache, must-revvalidate'); session_cache_limiter('private_no_expire'); session_start(); header("Content-Type: text/html; charset=EUC"); $http = $_SERVER['HTTP_REFERER']; //どこから来たか $form_id = $_POST['form_id']; $form_pass = $_POST['form_pass']; $flg = $_POST['t']; $session = session_id(); if($http == "http://192.168.1.250/~fukazawa/session/form.html"){ $_SESSION['id'] = $form_id; $_SESSION['pass'] = $form_pass; } $test = $_SESSION['id']; $test1 = $_SESSION['pass']; if($flg == "t"){ echo <<<EOM <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title> </title> </head> <body> ◎$test<br />$test1 <br><br><br><a href="session.php">test</a><br><br> <a href="session.php?t=test">test2</a> </body> </html> EOM; }else{ echo <<<EOM <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title> </title> </head> <body> ◎$test<br />$test1 <a href="session.php">test</a><br> <a href="session.php?t=test">test2</a> </body> </html> EOM; } ?> 引数で表示させる内容を異なるようにするPHPファイルです。 仮に一回目にIDを「てすと」、パスワードを「ttt」でログインした場合、session.php・session.php?t=testに表示されるのは、 「◎てすと ttt」 です。 そして、これをいったんログアウトして、今度は ID「二回目」、パスワード「two」でログインすると、 session.phpには 「◎二回目 two 」と表示されますが、 session.php?t=test に飛んだ場合、 一回目のIDとパスワード、つまり 「◎てすと ttt」 が表示されてしまいます。 ブラウザをリロードすると 「◎二回目 two 」 と表示されます。 これは、前のセッションがまだ残ってしまっているということなのでしょうか。 対処法が分からず困っています。

    • ベストアンサー
    • 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初心者です。セッションをはじめて扱ってみているのですが、上手く行かずに困っています。 HP1でセッションに文字や数値を入れて表示、HP2でも表示というごく単純なものでセッションを試して見ているのですが上手く行かずにいます。 何か初歩的な間違いだとも思うのですが、どうにも上手くゆかず質問させていただきました。何に問題があるかアドバイスやご助言をいただければと思います。 よろしくお願いします。 ---------------------- HP1 ---------------------- <?php session_start(); //セッション開始 $_SESSION["str"] = "aiueo あいうえお"; $_SESSION["num"] = 1; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> <title>session01</title> </head> <body> <p>page1</p> <?php print $_SESSION["str"]."<br />"; print $_SESSION["num"]."<br />"; ?> <p><a href="session02.php">page2へ</a></p> <?php ?> </body> </html> ---------------------- HP2 ---------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> <title>session01</title> </head> <body> <p>page1</p> <?php print $_SESSION["str"]."<br />"; print $_SESSION["num"]."<br />"; ?> <p><a href="session01.php">page1へ</a></p> <?php ?> </body> </html>

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

    PHP5.3.14を使っています。 セッションについて勉強中です。 セッションを使ってページの表示回数をカウントアップするソースと、 そのセッションを破棄するソースの2種類を用意しました。 ※それぞれ、session_id()をecho表示しています。 クッキーを使った状態でこれらを動かすと、 リセットする(リンクを押してリロードする)度にセッションIDが変わるのですが、 クッキーを使わずに定義済み定数SIDを使って動かすと、 カウント値は元に戻るのですが、 リセットしてもセッションIDが変わりません。 どうすれば、新しいセッションIDを発行(SIDの値を更新)できるのでしょうか? よろしくお願いします。 【以下、ソース2種類と、iniファイルの一部です】 ●up.php <?php session_start(); if (empty($_SESSION['count'])) { $_SESSION['count'] = 1; } else { $_SESSION['count']++; } echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); ?> <p> <?php echo $_SESSION['count']; ?> 回目。 </p> <p><a href="up.php">カウントアップ</A> </p> <p> <a href="reset.php">リセット</A> </p> ●reset.php <?php session_start(); echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); echo ("##### ". $_SESSION['count']."回表示しました。</br>"); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } if(isset($_REQUEST[session_name()])){ $_REQUEST[session_name()]="" ; } session_destroy(); ?> <p> <a href="up.php">初めからカウントする</A> </p> ●php.ini (クッキーを使わずSIDを使うを設定) session.use_trans_sid = 1 session.use_only_cookies=0 session.use_cookies=0

    • 締切済み
    • PHP
  • Xampp環境でのsession_start()がうまく行きません。

    OS:WindowsXP HomeEdition Xampp:Version2.3 この環境でテストを行っております。 以下のサンプルページにて、session_strat()のテストを行ったのですが、表示は、するのですが、リロードしても、カウントが増えません。 どなたか原因ご存知の方、いらしましたら宜しくお願いします。 http://www.scollabo.com/banban/php/ref/ref_session_start.html?PHPSESSID=0a2d8c8950664d0de51e27ae544d0cec 念の為、以下にソースも書いておきます。 -------------------------------------------------- <?php session_start(); if(isset($_session["count"])) { $_session["count"]++; } else { $_session["count"] = 1; } ?> <body> <p> こスページの訪問回数は <?php print $_session["count"]; ?> 回目です! </p> </body> -------------------------------------------------- ※13行目の"print"だけ、間違っていたので修正しています。 ※リロードすれば、以下のように出力させたいのですが、"1回目"のままです。 このページの訪問回数は 1回目です! このページの訪問回数は 2回目です! このページの訪問回数は 3回目です! このページの訪問回数は 4回目です! : このページの訪問回数は n回目です! 宜しくお願いします。

    • 締切済み
    • 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
  • $_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
  • PHP5のセッション管理に使う$_SESSIONに関する質問

    現在本と、WEBの入門サイトの二つでPHPを学習しているのですが $_SESSION変数を利用したアクセスカウンタのサンプルで WEBの情報では$_SESSIONを $_SESSION['count'] と書いていました(WEBはPHP4) そして、本の方では $_SESSION['acces_count'] と書いてありました そして、私は $_SESSION['acces_count'] を $_SESSION['testtest'] に変えて実行してみた所これでもエラーが出ずに実効できました $_SESSION変数のキーは、いかなる物でもかまわないのでしょうか

    • ベストアンサー
    • PHP
  • セッションに関して

    お世話になっております。 ここ数日、セッションの勉強をしているのですが、 http://www.stackasterisk.jp/tech/php/php03_06.jsp のサイトにある下記スクリプトを動かしてみました。 <?php session_start(); if (!isset($count)) $count=0; session_register("count"); $count++; ?> <html> <body> あなたは <?= $count ?> 回目の訪問です。 <a href="<?echo $PHP_SELF ."?PHPSESSID=". $PHPSESSID?>">カウントを増やす</a> </body> </html> すると、はじめに表示させた際、何やら0行目が原因とのエラーが表示され(初めだけだったので、内容を確認出来ませんでした。)、それ以降、エラーはないものの、カウントが増えずにいる状態です。 初歩的なこととは思いますが、上記サイトでは、不具合があった場合は想定しておらず、何処が可笑しな設定なのかが分からないのです。 また、サイト内にて、「count という変数の値は、 (デフォルトでは) /tmp に sess_ で始まるファイル名で保存」との説明がありますが、これはCドライブ内にあるtmpフォルダを指しているのでしょうか? カウンタが増えない事からファイルが生成されていないのでしょうが、PHPを触り始めて間もない私にとって全てが専門用語の説明に、色々と調べるが故にポイントが見えなくなっている状況です。 初歩的な質問でお恥ずかしい限りでは御座いますが、エラーが表示された原因、正常に動かない(カウントが増えない)原因。そして保存策フォルダの場所をご教授頂ければ幸いです。 宜しくお願い致します。 動作環境 winXP apacha1.3 PHP4.3 本も購入しているのですが、初歩的なことは割愛されているもので・・・宜しくお願い致します。

    • ベストアンサー
    • 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

専門家に質問してみよう