2012-03-21 29 views
4

.NET Framework 3.5およびC#を使用しています。.NETセッション - ユーザーがブラウザを閉じてもセッションが維持されます

ユーザーがログインする必要があるサイトがあるため、データベースを使用してログイン/パスワードが正しいかどうかを確認します。

その後、我々はFormsAuthentication.SetAuthCookie()への呼び出しを行うので、ユーザは自分のアプリケーションにログインするwe''l。

以降のすべてのページに、私たちはUser.Identity.IsAuthenticated(に確認してください)ユーザーがログインしている場合。

我々は、ユーザーがborwserを閉じた場合でも、このセッションを維持したいです。

これを行うにはどうすればよいでしょうか?

また、セッションが失われてしまったため、突然ユーザーが認証済みの状態を失ってしまいました。私はそのような新しい状態で問題を解決できると思います。

(私の英語.....ポルトガル語話者のため申し訳ありません)

答えて

6

あなたがasp.netでの認証Cookieやセッション状態の両方を持っていることを覚えて、用語を混在させることはできません。

あなたは永続的な認証クッキーを探しているようです。永続的な認証クッキーを持っていることはtrueを渡す

FormsAuthentication.SetAuthCookie("xxx",true); 

http://msdn.microsoft.com/en-us/library/twk5762b(v=vs.90).aspx

を試し認証Cookieは、ブラウザの再起動後も存続することができます。 はまた、あなたはあなたのweb.configファイル

<authentication mode="Forms"> 
     <!-- The name, protection, and path attributes must match 
     exactly in each Web.config file. --> 
     <forms loginUrl="Default.aspx" name=".ASPXFORMSAUTH" protection="All" path="/" timeout="360"/> 
    </authentication> 

<sessionState mode="InProc" timeout="360" /> 
1

私はセッション情報を格納するためのクリーンなアプローチを示唆している中でフォーム認証とセッションのためのあなたのタイムアウト値を考慮する必要があります。確かにShayの認証クッキーの手法は、が正しいですが、セッション状態を長時間処理中に保存することは、アプリケーションを複数の同時ユーザーに拡大する際に重大な欠点があります。

最初に、セッション状態とは、文字通り、Session[]コレクションを介してアクセスできるものを意味します。

大銀行での使用が成功しているのは、永続セッション関連の情報をデータベースに保存することです。

は、基本的には必要

  1. と、primaryforeignユーザIDにキーであるテーブル)が格納する必要のある変数またはb)単一のBLOB列シリアライズ値を含むと同じ数の列クラス
  2. PersistentSessionクラス
  3. グローバルにそのオブジェクトを設定します。Session_Start以上Application_PostAuthenticateRequest方法asaxとあなただけのオブジェクトをデシリアライズ/シリアライズアプローチBを選んだ、あなたはそれを得た場合はGlobal.asaxのSession_End方法

SessionからDBにSessionオブジェクト

  • 保存中のオブジェクトを、それを救います!

    *これらの男がSAVESESSIONを実際に使用した方法は全く異なります

  • 関連する問題