• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sessionについて)

セッションに関するアドバイスを教えてください

このQ&Aのポイント
  • セッションに関するアドバイスを教えてください。ログイン状態を認識させるためには、セッション変数だけで事足りるのか?また、セッションIDの意味するとは?
  • セッションハイジャックを避けるためサーバー側に保存させるセッションIDを随時変更している場合、自動ログイン機能を用いるには、どのような流れになるのか?
  • セッションIDの必要性と、クッキーを用いた自動ログインの方法について教えてください。

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

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

スクリプトに問題はありません。 有効期限が5秒というシビアな数字なので、こちらの環境でも検証してみましたが、動作しました。 時刻が合っていない事が原因と思われます。 PCの時計を狂わせる(進める)と動作しませんでした。 sadachaさんのPCの時計が、サーバーの時計より5秒以上進んでいるのだと思います。 つまり、常に有効期限切れのookieを発行しようとするから、Cookieデータが作られないのです。 有効期限をマイナス(過去)にするのは、Cookie変数を削除する手法そのものです。 時刻の確認をして下さい。 print date("Y/m/d H:i:s"); ただし、 私も今回初めて知ったのですが・・・ ブラウザによって挙動が違いました。 上記の現象は、IE6で起こりましたが、Firefoxでは正常に動作します。 どちらのブラウザが正しいと言えるのか・・・判断難しいですね。

sadacha
質問者

お礼

tdsh様 こんばんは。引き続き詳しいご説明を有難う御座います。 色々と動作確認をしていたのでお返事が遅くなってしまいました。申し訳ありません。 まだまだ、実際の動作を確認しなければ、理解というまでは行きませんが、詳しいご説明により大きく前進出来たような気がします。(実際のコーディングという意味において、設計するまでには至っていないという意味です。) 今後、これに付随する質問をする事もあるかとは思いますが、ご親切な回答に感謝しております、有難う御座いました。

その他の回答 (1)

noname#30334
noname#30334
回答No.1

SESSION変数を使用すると、 サーバー側では、SESSIONファイル(またはDB)が作られ、その中にidなどのSESSION変数に指定した情報が格納されます。 セッションIDは、そのファイル名(DBの場合は主キー)に用いられます。 一方クライアント側では、そのセッションIDがCookieに保存されます。 Cookieが使えないブラウザでは、URLの末尾に「?PHPSESSID=・・・・」が付加される場合もあります。 つまり、idなどのSESSION変数の値は、クライアント側には存在しないので、それをを取り出すのにセッションIDが必要になります。 php.iniでSessionファイルを格納するディレクトリが指定してあるので、その中にあるセッションファイルを開いてみると良いと思います。 テキストファイルですので。 自動でログインする機能を実装するには、 セッションIDではなく、ログインIDやパスワードそのものをCookieに保持する必要があるでしょう。 理由は・・・セッションは、ブラウザを閉じた時に破棄される(クライアント側)ものだし、 セッションIDを書き換える設定をしているのであれば、なおさらです。 ただし、パスワードをCookieに入れるのは、セキュリティに自信が無ければ避けた方が良いです。

sadacha
質問者

お礼

tdshさま はじめまして、こんばんは。 ご丁寧な詳しい説明を有難う御座います。 なるほど・・と思いつつ、実際にネット上のサーバーにアップロードして、自分のクッキー情報を確認しようと思い、書籍にある以下のようなソースをアップしてみましたが、リロードしてもカウントしてくれません。これは正常にクッキーがセットされていない事になるのでしょうか? 些か質問とは外れた内容になっおりますが、把握しながら理解を深めたく思っております。お忙しい中恐縮ですが引き続きアドバイスなど頂戴できれば幸いです。 <?php $count = 1; if (isset($_COOKIE["count"])) { $count = $_COOKIE["count"]; $count++; } setcookie("count", $count, time() + 5 ); ?> <HTML> <HEAD> <TITLE>クッキーのテスト</TITLE> <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> </HEAD> <BODY> クッキーのテスト<BR> <BR> <?php if ($count == 1) { ?> はじめての訪問です。<BR> <BR> クッキー情報はありません。<BR> このページをリロードしてください。<BR> <?php } else { ?> あなたの訪問は<?=$count?>回目です。<BR> <BR> 5秒以内にリロードするとカウントアップします。 <?php } ?> </BODY> </HTML>

関連するQ&A