dポイントプレゼントキャンペーン実施中!

webシステムのセッションについて質問です。
セッション情報はサーバーのどこに保存されているのでしょうか?
apache等のサーバーソフトが使っているメモリ領域でしょうか?それでもアプリが使っている領域なのでしょうか?

質問者からの補足コメント

  • Apacheでセッションタイムアウトを設定できたりしますよね。その時に、アプリ側で管理しているセッション情報をどのように判断しているのでしょうか

      補足日時:2020/11/08 01:19

A 回答 (3件)

ログインセッションのことでしょうか。



通常は、サーバ側の記憶領域にセッション情報を保持します。記憶領域は、ファイル、メモリ、DBなどがあり、これはアプリの実装によります。セッション情報の中に、機微情報に加え、セッション有効期限を含めることで、セッションタイムアウトを実装できます。サーバに保存されているセッション情報を引き出すためには、クライアントが次ページにアクセスする際にセッション情報を引き出すための情報(セッションキー)を引き渡す必要がありますが、これはPOSTパラメータ、GETパラメータ、Cookieなどに含めることが多いです。また、セッションハイジャックをできるだけ防止するために、セッションキーの正当性をチェックするための情報までセッション情報に含めるのが一般的です。

>Apacheでセッションタイムアウトを設定できたりしますよね。

これは、恐らくHTTPというプロトコルでサポートしているKeep-AliveのTCPセッションタイムアウトのことを言っているのだと思います。HTTPのKeep-Aliveは、一度のTCP接続で複数のリクエストを連続して投げることができるというもので、大量画像ファイルを持つページの表示やストリーミングなどで細かく3-wayハンドシェイクすることによるオーバヘッドを軽減する効果があります。しかし、1つのクライアントがTCPセッションをつなぎっぱなしにしてしまうと他のクライアント向けの処理に影響があることから、一定時間データのやり取りがなければサーバ側が自動的に接続を切断することがあります。この接続断までの時間をセッションタイムアウトと呼ぶことがあります。Webアプリのセッションとは全く別物です。
    • good
    • 0

“セッション”という言葉でも、レイヤーによって具体的に指すものが違ってきます。



Apacheだけで考えるなら、例えばGETリクエストからレスポンスの返却までが一連の“セッション”です。つまりタイムアウトはこれが何秒以内に成立しない場合にはその“セッション”を破棄するという事です。
この意味でのセッション情報はサーバープロセスのメモリ内において管理されます。

自分が先に回答したのは上位のレイヤーで管理するアプリケーションの“セッション”です。質問の冒頭に『webシステムのセッションについて』と書かれているので、こちらの意味での回答です。
例えばログイン等の仕組みがあるウェブシステムにおいて、ウェブサーバーが複数台で負荷分散しているケースでは、ログイン状態等の“セッション”を複数台で共有しなければならないので、アプリケーション(JavaとかPHPとか)がこれを管理します。
それに関しては、先に回答したとおり『設定による』という事になります。
    • good
    • 0

『アプリによって定義されている領域』という回答が正しいかと思います。


何の“アプリ”でどういう設定にしているかによります。
それ次第では、メモリに保存することもフィアルに保存することもデータベースに保存する事もありえます。
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!