![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
セッションについていくつか質問させて頂きたい事があります。
よろしくお願いします。
1. Cookieの場合、Windowsだと通常C:\Documents and Settings\AAA\Cookies のようなディレクトリにデータが保存されるが、セッションを扱う場合、クライアントのどのディレクトリにセッションIDの情報が記憶されるのか?
2.初期設定では、サイトにアクセスして発行されたセッションIDは、ブラウザを閉じた時に自動的に破棄されるようになっているのか?
3.上記の2が真の場合、ブラウザを閉じた後にまた開き、再度サイトにアクセスする毎に毎回異なる値のセッションIDを発行することは出来るのか?
以上の3つです。
また、参考になりそうなサイトがありましたらURLを載せて頂けるととても助かります。
どなたか詳しい方いらっしゃいましたらご教授よろしくお願いします。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?5a7ff87)
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
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と考えていいと思います。
>クライアントサイドにはクッキーファイルは作成されません。
ですよね。所定のCookieフォルダのクッキーファイルに更新が見られないのでおかしいと思いました。メモリ上に書かれるのですね。詳しいご説明ありがとうございました。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?5a7ff87)
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のとおり一連の接続の事ですので接続が切れれば繋ぎ直したときにはもはや別の接続となりますので別のセッションです。
その性質から(メンテナンスの都合上現実性はありませんが)接続を何年も保持すれば何年後でも同じ名前であり続ける事ができます。
この回答への補足
詳しいご説明ありがとうございます。
まだいくつか疑問が残るのですが、手元にある書籍には、「セッション情報はそのものはあくまでサーバ側で管理されるものであり、クライアント-サーバ間でやりとりされるのは、そのキーであるセッションIDだけである」と記されており、つまり、「セッションID」だけは、クライアント側に記憶されるものである、というような意味にとれるのですが、それは間違っているということでしょうか?実際、セッションが働いている状態で、例えば「A」というセッションIDが振り当てられたクライアントが、サーバに複数アクセスしてきたクライアントのうちどれなのかを識別しようとした時、サーバはどうやってどのクライアントが「A」のIDを振り当てられたクライアントだと識別しているのでしょうか?IPアドレスでしょうか?また、「接続状態」とのことですが、クライアントがサーバに何らかのリクエストを出し、レスポンスが返ってきた時点で接続は一回切れるものと思っていたのですが、違うのでしょうか?よろしければご教授下さい。よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPのセッション有効期限について 5 2023/06/14 12:40
- ネットワーク OSI参照モデルの各層の役割がわかりません。 3 2023/04/21 21:12
- PHP ここで言うトークンの意味を教えてください。 3 2022/08/24 03:03
- Google Drive 会社への勤怠届出にGoogleフォームを使用しています。 しかし、最近何故か『このサービスはビジター 2 2022/12/05 00:21
- PHP 「ログイン機能を持たせる」説明が気難しいです。 2 2022/10/11 02:59
- その他(ゲーム) ファイナルファンタジー7リメイクのnormalクリア後のセッションセレクトについて。 セッションを自 2 2023/04/11 16:52
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- Chrome(クローム) Cookieを削除 他サイトでの自動ログインなどの設定も削除されますか パソコン クロームです 1 2022/09/10 21:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
$_SESSIONと、POSTやGETの違い
-
PHPのセッション有効期限について
-
共用サーバでのセッション管理...
-
URLのパラメータをGETのままで...
-
セッション変数にパスワードを...
-
セッション変数について
-
セキュリティを強固にするには?
-
携帯電話対応のカートって??
-
二重ログイン管理について
-
セッションの仕組み
-
!issetの冒頭の!ビックリマー...
-
ブラウザを閉じた後もセッショ...
-
特定のページからのみのアクセス
-
SESSION情報は、ブラウザを起動...
-
セッション ID とセッション名...
-
学校の授業で困っていることが...
-
複数のサーバで運営する場合の...
-
phpのセッションについて質問です
-
【PHP】SESSION変数の競合を...
-
自動ログイン機能
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLのパラメータをGETのままで...
-
PHPのセッション有効期限について
-
ブラウザを閉じた後もセッショ...
-
Sessionの上限について
-
!issetの冒頭の!ビックリマー...
-
ログインしたら他からログイン...
-
セッション ID とセッション名...
-
session_start()で生成されるセ...
-
ログインした掲示板ですが、直...
-
【PHP】SESSION変数の競合を...
-
セッションを維持したまま、サ...
-
セッションのスコープ(有効範...
-
「ログイン機能を持たせる」説...
-
PHP cookieの値が更新されない...
-
別ブラウザ間でセッションの値...
-
リアルタイムカウンター
-
session_cache_limiterの使い方
-
SESSION情報は、ブラウザを起動...
-
セッション変数の命名規則
-
セッション変数にパスワードを...
おすすめ情報