我有一个基本控制器,所有控制器都扩展,在基本控制器上我做一些会话处理。比如存储用户ID等。
此外,我有一个User
类,其他类包括:
class User
{
public int Id {set;get;}
public virtual Location Location {set;get;}
}
当我从数据库填充这个(我使用代码第一个EF)时,显然位置不会加载,我应该按照它的方式存储在会话中吗?
主要问题是我将Id
存储在基本控制器中,并在每次重新启动应用程序时丢失会话。为什么会这样?我延长了会话超时并没有帮助。
会话处理的最佳做法是什么?有没有我可以使用的包装?
答案 0 :(得分:3)
重新:将用户存储在会话中:您可以,只需确保您无法访问“位置”。属性没有重新附加到会话。如果您不需要这些数据,可以选择将您 所需的数据复制到一个没有“位置”的简单对象中。并将其存储在会话中。
Re:丢失会话上下文,因为默认是将会话数据存储在内存中,每当应用程序重新启动时都会丢失。如果您希望该状态在应用程序重新启动时保持不变,请查看使用StateServer模式进行会话(但如果您希望保持服务器重新启动或在多服务器场中工作,那么您想要去SQLServer路由)。
答案 1 :(得分:-1)
您需要的 - 将此代码添加到web.config / system.web:
<machineKey validationKey="C5034160419189092507195D247C6FCD9F54D7A967372A23078E09F6440087328A874AD69955F441B526A265CC3A17CDEAAE8AB21A16868F549C3077C39C8E9F" decryptionKey="078FAD13FAC4E41EB0762F0B34E3F4990A144897C3387A70A746187F3AECD8DE" validation="SHA1" decryption="AES" />
<sessionState timeout="300" mode="InProc"></sessionState>
此machinKey是从http://aspnetresources.com/tools/machineKey
生成的