私はHttpContext.Current.Session現在のユーザーに格納しています、SiteUserは現在アクティブなsiteuserを提示し、シングルトーンのクラスで、彼がログインしたときに、私は(新しいSiteUserを作成しています)コントローラでとコンストラクタでセッションに彼を追加:HttpContext.Current.Sessionヌル項目
public static SiteUser Create()
{
HttpContext.Current.Session[sessionKey] = new SiteUser();
return HttpContext.Current.Session[sessionKey] as SiteUser;
}
、その後、私はチェックがセッションで使用可能なユーザーですよサーバーサービスへのすべての要求に:
public static SiteUser Current
{
get
{
if (HttpContext.Current.Session == null || HttpContext.Current.Session[sessionKey] == null)
{
throw new SiteUserAutorizationExeption();
}
return HttpContext.Current.Session[sessionKey] as SiteUser;
}
}
そうでない場合、私は非auth-を生成していますユーザーの例外をログオンページにリダイレクトします。 HttpContext.Current.Session [sessionKey]はnullですが、HttpContext.Current.SessionはnullでなくFormsAuthenticationTicketが使用可能で、Expiredプロパティもfalseです。 誰かが私を助けることができる、なぜHttpContext.Current.Session [sessionKey]がnullになることができますか?
UPD:WebConfigのセッションの設定:<sessionState mode="InProc" timeout="20" />
UPD:SESSIONKEYがある:public const string sessionKey = "SiteUser";
UPD2:私はセッションでも、文化の設定を保存することを、追加することを忘れている:
HttpContext.Current.Session["Culture"]
と例外ヒット、HttpContext.Current.Sesことシオンは、[SESSIONKEY]文化アイテム、nullでUPD3
ではありません:私はソースの.NET Frameworkのシンボルテーブルをダウンロードし、コレクションアイテムを変更するにSessionStateItemCollectionにブレークポイントを設定しています。原因でweb.configファイルのセッションタイムアウトで、セッション終了イベント で、私はそれができる方法を理解することはできませんが起こる)「文化」 2の後に設定される - nullの 1)すべてのコレクションアイテム:と私はいくつかのミスを解消しましたSESSIONKEYを変更することができる20
メモリ内セッションですか?またはデータベースに永続化するように設定されていますか?また:おそらくIISは、アプリケーションプールをリサイクルですか? –
mmm ..私はInProcセッションモードを使用しています、それはセッションがメモリ内にあることを意味していますか? IISは、おそらくアプリプールをリサイクルしている - 私はわからない、現在私はdevのサーバーがリサイクルされますしていないのasp.net開発サーバー – Boo
で実行していない - それはあなたの問題を解決しましたIISの事 –