我想存储用户在一系列不同的ASP.Net Webforms中执行的一些操作的“状态”。什么是我的坚持的状态的选择,什么是每个解决方案的利弊?
我一直在使用Session对象,并使用一些帮助方法来强烈地键入对象:
public static Account GetCurrentAccount(HttpSessionState session) { return (Account)session[ACCOUNT]; } public static void SetCurrentAccount(Account obj,HttpSessionState session) { session[ACCOUNT] = obj; }
我被许多来源告诉“会议是邪恶的”,所以这真的是这个问题的根本原因。我想知道你认为“最佳实践”,为什么。
解决方法
会话状态没有内在的邪恶。
有一些事情要记住,可能会咬你:
>如果用户按浏览器返回按钮,则返回上一页,但会话状态不会还原。因此,您的CurrentAccount可能不是原来在页面上的。> ASP.NET进程可以通过IIS回收。当这种情况发生时,您下次的请求将开始一个新的过程。如果你使用进程会话状态,默认情况下,它会走了:-(>会话也可以超时有相同的结果,如果用户没有活动一段时间。这默认为20分钟,所以一个美好的午餐会做到。>使用出过程会话状态要求存储在会话状态中的所有对象都是可序列化的。>如果用户打开第二个浏览器窗口,他将期望有一个第二个不同的应用程序,但会话状态最有可能在两个之间共享。因此,在一个浏览器窗口中更改CurrentAccount将在其他浏览器窗口中执行相同操作。