2016年01月14日

フォーム認証とセッションは、相互に関係ないので要注意

Webサーバでのセッションは、ブラウザに対して SessionID が発行されて、Session 変数にクライアント固有の値を保持します。タイムアウトはデフォルトで20分です。ログイン等を行った後で、ログイン状態を Session 変数に保存したりしますが、クライアントからの応答がなにもない状態が続くとタイムアウトになり、セッションに保存していた情報はすべて消えます。

一方で、フォーム認証は、FormsAuthentication.SetAuthCookieでログイン状態になり、FormsAuthentication.SignOutでログアウト状態になります。フォーム認証もブラウザに対してチケットを発行する仕組みで、時間がきたらタイムアウトしますが、永続的に与えることも可能です。

セッションと、フォーム認証は、基本的にそれぞれ独自のタイムアウトがあるわけですが、別々のタイムアウト時間を与えることができるため、セッションがタイムアウトしても、フォーム認証は残っていたり、その逆に、フォーム認証のタイムアウト時間が短いとセッションは残っているのに、フォーム認証がタイムアウトしてしまうことがあります。

例えば、フォーム認証が先にタイムアウトすると、web.config で指定していたページへアクセスできなくなったりします。逆に、セッションが先にタイムアウトすると、ログインしているように見えるのにページ内容が違って見えたりします。どうしたらいいかは、システムごとに違うと思いますが、まずはフォーム認証とセッションを、ログイン状態であるか、ログアウト状態であるかを一致させることが重要だと思います。

とにかく、セッションと、フォーム認証はそれぞれ独自のメカニズムであり、全く関係ない点に要注意です。
posted by 開発G at 07:15| Comment(0) | TrackBack(0) | ASP.NET
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/171906849

この記事へのトラックバック