• ベストアンサー

セッションについて

セッションについていくつか質問させて頂きたい事があります。 よろしくお願いします。 1. Cookieの場合、Windowsだと通常C:\Documents and Settings\AAA\Cookies のようなディレクトリにデータが保存されるが、セッションを扱う場合、クライアントのどのディレクトリにセッションIDの情報が記憶されるのか? 2.初期設定では、サイトにアクセスして発行されたセッションIDは、ブラウザを閉じた時に自動的に破棄されるようになっているのか? 3.上記の2が真の場合、ブラウザを閉じた後にまた開き、再度サイトにアクセスする毎に毎回異なる値のセッションIDを発行することは出来るのか? 以上の3つです。 また、参考になりそうなサイトがありましたらURLを載せて頂けるととても助かります。 どなたか詳しい方いらっしゃいましたらご教授よろしくお願いします。

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

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

ANo3の方の回答で、 >session_cache_expire()関数などでセッションの有効時間を設定した場合に とありますが、session_cache_expire関数で指定するのはページキャッシュの有効期間です。session_cache_limiter関数と組合せて使います。 以下の3つは独立したものです。 ・サーバ側でのセッション情報の保持期間  session.gc_maxlifetime(ある意味、目安程度のものです) ・ページキャッシュの方法と有効期間  session.cache_limiter、session.cache_expire ・cookieの有効期間  session.cookie_lifetime

miraikako
質問者

お礼

とても参考になりました。 3度も詳しいご説明ありがとうございましたm(__)m

その他の回答 (3)

回答No.3

A1 恐らくはIEでの動作を言っていると思いますので、それを前提に。 session_start()の前に、session_cache_expire()関数などでセッションの有効時間を設定した場合にC:\Documents and Settings\AAA\Cookiesのようなクライアントサイドのフォルダにクッキーデータが作成されます。 これは Set-Cookie: PHPSESSID=**********・・・・ のようにヘッダーに書き出され、クッキーとしてセッションIDが渡されます。 当然クッキーなので、ファイルの中にはPHPSESSID=*******************のようなセッションIDが記憶されます。 セッションの有効時間が設定されない場合セッションIDはメモリ上に格納され、クライアントサイドにはクッキーファイルは作成されません。 ブラウザを閉じた時点でメモリからデータが消されるため、セッションが切れると言う状態になります。 A2 上記のような理由でクライアントサイドで自動的に破棄されます。 A3 セッションIDは毎回異なるセッションIDと考えていいと思います。

miraikako
質問者

お礼

>クライアントサイドにはクッキーファイルは作成されません。 ですよね。所定のCookieフォルダのクッキーファイルに更新が見られないのでおかしいと思いました。メモリ上に書かれるのですね。詳しいご説明ありがとうございました。

回答No.2

A1 セッションIDはクライアント側に保存されます。通常はcookieが使われます。 cookieを使わない場合は、 <a href="nextpage.php?PHPSESSID=xxxxxx">次へ</a> もしくは、 <input type="hidden" name="PHPSESSID" value="xxxxxx"> のようにHTMLにセッションIDを埋め込んでやることで、クライアントに保存します。 サーバ側では、GET or POST or cookieでクライアントから送られてくるセッションIDを元に、ユーザの同一性を確認します。 クライアントのIPアドレスは無関係です。違うユーザが同一IPアドレスでアクセスする状況や、同じユーザが毎回違うIPアドレスでアクセスする状況もあるので、IPアドレスはユーザの識別には使用できません。 A2 #cookieを使う前提で。 初期設定では、セッションID保存用のcookieは、expires属性無しで発行されます(このへんは、session.cookie_lifetimeで設定します)。 cookieはexpires属性無しで発行すると、ブラウザを終了した時点で、クライアントから消えてしまいます。expires属性ありで発行したcookieは、クライアントのハードディスク(C:\Documents and Settings\AAA\Cookies)に保存され、ブラウザ終了によって消えることはありません。 ただし、セッションID用のcookieをexpires属性無しで発行し、ブラウザを終了したとしても、その時点ではサーバ側の情報は削除されません(サーバ側では、ユーザがブラウザを閉じたことを知ることができないため)。 3A #cookieを使う前提で。 できます。逆に、expires属性無しでセッションID用のcookieを発行した場合、ブラウザ終了後に再アクセスしたユーザに、さきほどアクセスした際のものと同一のセッションIDを割り当てることはできません。

回答No.1

A1.セッションはサーバ側で保持されるものでありクライアント側には何も保持されません。 そのためサーバにはCookie以上に負荷がかかりますがクライアント側での一切の改変が行えないためセキュリティーが強力です。 A2.サーバがクライアントとの一連の接続がセッションです。 そのため接続が切れればセッションは破棄されます。 ブラウザを閉じなくてもネットワークの障害による切断 クライアント側での意図的な切断 無通信が一定期間続いた場合のサーバ側でタイムアウト処理 等の理由で破棄されます。 A3.A2のとおり一連の接続の事ですので接続が切れれば繋ぎ直したときにはもはや別の接続となりますので別のセッションです。 その性質から(メンテナンスの都合上現実性はありませんが)接続を何年も保持すれば何年後でも同じ名前であり続ける事ができます。

miraikako
質問者

補足

詳しいご説明ありがとうございます。 まだいくつか疑問が残るのですが、手元にある書籍には、「セッション情報はそのものはあくまでサーバ側で管理されるものであり、クライアント-サーバ間でやりとりされるのは、そのキーであるセッションIDだけである」と記されており、つまり、「セッションID」だけは、クライアント側に記憶されるものである、というような意味にとれるのですが、それは間違っているということでしょうか?実際、セッションが働いている状態で、例えば「A」というセッションIDが振り当てられたクライアントが、サーバに複数アクセスしてきたクライアントのうちどれなのかを識別しようとした時、サーバはどうやってどのクライアントが「A」のIDを振り当てられたクライアントだと識別しているのでしょうか?IPアドレスでしょうか?また、「接続状態」とのことですが、クライアントがサーバに何らかのリクエストを出し、レスポンスが返ってきた時点で接続は一回切れるものと思っていたのですが、違うのでしょうか?よろしければご教授下さい。よろしくお願いします。

関連するQ&A