MVC 4失败

时间:2012-10-08 01:45:08

标签: c# asp.net-mvc entity-framework session

我有一个基本控制器,所有控制器都扩展,在基本控制器上我做一些会话处理。比如存储用户ID等。

此外,我有一个User类,其他类包括:

class User
{
   public int Id {set;get;}
   public virtual Location Location {set;get;}
}

当我从数据库填充这个(我使用代码第一个EF)时,显然位置不会加载,我应该按照它的方式存储在会话中吗?

主要问题是我将Id存储在基本控制器中,并在每次重新启动应用程序时丢失会话。为什么会这样?我延长了会话超时并没有帮助。

会话处理的最佳做法是什么?有没有我可以使用的包装?

2 个答案:

答案 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

生成的