困ってます。phpセッションについて

このQ&Aのポイント
  • パソコンの仮想サーバ(XAMPP)で動かした所、セッションに関わる部分がうまくいかないです。セッションの保存や呼び出しはうまくいっていないようです。
  • セッションに関わる設定やコードの箇所を確認しましたが、特に問題は見つかりませんでした。
  • セッションの設定ファイルである「php.ini」のセッションの箇所を確認しましたが、特に問題はありませんでした。
回答を見る
  • ベストアンサー

困ってます。phpセッションについて

phpセッションについて教えてください。 既にwebサーバで動いているシステムがあります。 改修する必要があるため、パソコンの仮想サーバ(XAMPP)で動かした所、セッションに関わる部分がうまくいきません。 ●保存してる箇所 session_start(); session_regenerate_id( TRUE ); $_SESSION['xxx'] = $xxx; ●呼び出している箇所 session_start(); session_regenerate_id( TRUE ); if ( !isset( $_SESSION['xxx']) ) { //←ココでひっかかります //終了するための処理 exit; } $xxx = $_SESSION['xxx']; ************** 設定に関する部分です。 ●「.htaccess」の設定は以下のようにしています。 php_flag session.use_cookies On php_value session.cookie_lifetime 0 php_flag session.use_trans_sid Off php_value session.gc_maxlifetime 3600 php_value session.save_path 'C:temp' 'C:temp'に保存されたデータはありますので、書き出しはうまくいってるようです。 呼び出しがうまくいってません。 ソースの session_start(); session_regenerate_id( TRUE ); の直後に var_dump($_SESSION['xxx']); で値を参照するとNULLです。 ●「php.ini」のセッションの箇所は以下のようになっています。 session.save_handler = files よろしくお願いします。

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

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

まずはhttpリクエストヘッダで送っているcookieと、httpレスポンスヘッダで送られてきているset-cookieが「期待したとおり」になっているか確認した方がいいと思います。 まさか、アクセスするURLがlocalhostだったり127.0.0.1だったり(途中でホスト名が変わっている)ということはありませんよね?

vanilla_san
質問者

お礼

回答ありがとうございます。 簡単なセッション付きの画面遷移のプログラムを作りテストしてみたところ、セッションの受け渡しはできていました。 ZAMPPの設定ではなさそうです。 コード中に変数表示を仕掛けてもう少し調べてみます。 ご親切にありがとうございました。 また何かありましたらよろしくお願いします。

関連するQ&A

  • PHP SESSION 設定について

    PHP(レンタルサーバー:5.3.6)(ローカル:5.3.26)を使用しています。 簡単なログインフォームを作っていました。 ローカルでテスト運用したところ、問題なく動作していたのでレンタルサーバーにアップロードしたところ、SESSIONが動いていない(?継承していない?)ことに気づきました。 そこでphpinfoを確認すると レンタルサーバーは、 session.cookie_httponly=1(On) session.cookie_secure=1(On) になっていました。XSS攻撃に全部ではないけどレンタルサーバーの設定だと有効だということなので、ローカルもレンタルサーバーの設定に合わせたいと思っています。 ※設定をoffにすると問題なく動作します。 sample2.phpで、「$_SESSION['sample_title']」が表示されなくなってしまいました。 どのようにすれば、sessionが正しく動作するかご教授お願いいたします。 抜粋スクリプト ■sample1.php session_start(); session_regenerate_id(TRUE); $_SESSION["sample_title"] = "PHPのSESSION"; //セッション登録 echo "$_SESSION['sample_title']に代入した値は「<?php echo $_SESSION['sample_title'] ?>」です。"; echo "<a href = 'sample2.php'>次のページ</a>"; ■sample2.php session_start(); session_regenerate_id(TRUE); echo "受け取ったセッション変数の値は「".$_SESSION['sample_title'] ."」です。";

    • ベストアンサー
    • PHP
  • session(PHP)が表示されない。

    sessionを理解するために簡単な例文を入力して sessionを呼び出そうとしました。 しかしできません。文法上は本のCDを丸写しなので 問題ないと思います。 設定(php.ini)で何か確認する場所があればお願いします。 Windows XP Apache 1.3.27 PHP 4.3.1 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_dividend 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 0 0 session.save_path /tmp /tmp session.serialize_handler php php session.use_cookies On On session.use_only_cookies Off Off session.use_trans_sid On On

    • ベストアンサー
    • PHP
  • セッションファイルの有効期限ですが、

    セッションファイルの有効期限ですが、 phpのデフォルトでは session.gc_maxlifetimeが1440、 session.gc_probabilityが1のようなんですが、 これだとローカル環境で確認したところ、 2日くらい前のセッションファイルでもサーバ側に残っています。 いくらsession_regenerate_id(true)とかやっても、いきなり画面を閉じたりすると このように残ってしまうのですが、デフォルトの設定のままだと危険ではないでしょうか? また、ためしに設定を session.gc_maxlifetimeを5、 session.gc_probabilityを100に変えてみたところ、 古いセッションファイルはすぐに削除されましたが、 最新のものだけはなぜか残り続けました。 セッションファイルの削除はどのように実装されていますか?(特に画面をいきなり閉じられた場合の対策) また、session.gc_maxlifetime、session.gc_probabilityのデフォルト値は変更していますでしょうか? さらに、サーバ側のセッションファイルさえ破棄してしまえば、クライアントのセッションクッキーは残っていても別に問題ないと思うのですが、どうでしょう? ちなみに私のPHPバージョンはwindows版の5.2.4です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 「セッション管理用のクッキーに secure 属性をつける」についてで

    「セッション管理用のクッキーに secure 属性をつける」についてですが、 具体的には、 <?php session_start(); session_regenerate_id(TRUE); ?> とあった時に、どのようにコードを加えれば良いのでしょうか? ご教授、よろしくお願いします。

    • ベストアンサー
    • 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のセッションについて

    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
  • セッションハイジャック(セッション固定化)の対策は必要?

    ・php.ini で session.use_only_cookies = 1 ・フレームワークで XSS 対策(自動エスケープ) を行っている場合、セッションハイジャック(セッション固定化)の 可能性は、ないと考えてよろしいでしょうか? というのも、session_regenerate_id() は、セッションハイジャックの 可能性を、かなり減らせると思うのですが、これを利用すると、 レスポンスが来る前に、ユーザが送信ボタンを再度クリックしたり リロードした場合に、セッションが切れてしまうことが よくあるからです。 そのため、1/5の確立で session_regenerate_id() を起動、 if (mt_rand(1, 5) === 1) {   session_regenerate_id(TRUE); } としてみたのですが、抜本的な対策とは思えません・・・。 XSS対策が完璧で、セッションはクッキーのみの場合、 他にどのような対策が必要でしょうか?ご教示ください。

    • ベストアンサー
    • PHP
  • セッションが変数が取得できません

    こんにちは。初心者で大変申し訳ないのですが、2日間悩みましたがどうしても解決できないため質問させて頂きました。どうかご教授下さい。 PHPのセッション機能の利用をしようと以下のような環境でテストスクリプトを実行したのですが、うまくいきません。 PHPバージョン4.3.10 register_globals On session.auto_start Off session.bug_compat_42 On session.bug_compat_warn On session.cache_expire 180 session.cache_limiter nocache session.cookie_domain no value session.cookie_lifetime 0 session.cookie_path / session.cookie_secure Off session.entropy_file no value no session.entropy_length 0 session.gc_divisor 100 session.gc_maxlifetime 1440 session.gc_probability 1 session.name PHPSESSID session.referer_check no value session.save_handler files session.save_path /tmp session.serialize_handler php session.use_cookies Off session.use_only_cookies Off session.use_trans_sid On SESSION登録側スクリプト <?php session_start(); $_SESSION['tarou'] = 50; ?> <a href="test.php">test</a> 結果表示側スクリプト <?php session_start(); echo($_SESSION['tarou']); ?> session.use_trans_sid Onで透過的にURIにセッションIDを埋め込むタイプで、 セッションファイル自体は作られているのですが セッション変数は登録されておらず、空のセッションファイルとなってしまっています。 色々と調べてみたのですがどうしても解決できません。 大変お手数ですがどうか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • セッションの仕組み

    php初心者です セッションの仕組みを教えてください 質問1 セッションidとセッションクッキーは同じものですか? 質問2 セッションidやセッションクッキーはデフォルトでは、ブラウザを閉じた時に削除されますか? 質問3 レンタルサーバーのphp.iniを調べてみたところ 保存場所がsession.save_path no valueでした。この場合、訪問者のパソコンにクッキーが保存されてしまうのでしょうか?サーバーに保存する方法はありますか? 質問3 session_start();でセッションを開始したときセッションidが自動で付けられるのはわかりましたが、 セッションid(MD5で作られた数字)の使い道がわかりません 質問4 セッションidはどこに利用すればいいのでしょうか? session_start(); session_id(); //このセッションidの利用方法がわかりません $_SESSION['id'] = $_POST['id']; よろしくお願いします

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

    WEB上でPHPによるアクセス制限をしたいのですが、.htaccessを設定しているとサーバーエラーとなります。.htaccessをはずすと初期設定画面へは飛べ、初期設定できるのですが。 .htaccessの内容が悪いのか、どうか教えてください。 以下内容です。 AddDefaultCharset Shift_JIS AddType application/x-httpd-php .php .html php_flag session.use_cookies Off php_flag session.use_trans_sid On php_value session.name sd ともう一カ所のです。 order allow,deny deny from all allow from localhost

    • 締切済み
    • PHP

専門家に質問してみよう