0

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

此外,我有一个User类,它有其他类,例如:

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

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

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

会话处理的最佳实践是什么?有我可以使用的包装器吗?

4

2 回答 2

3

回复:将用户存储在会话中:您可以,只需确保您在不将其重新附加到会话的情况下永远不会访问“位置”属性。如果您不需要数据,一个选项是将您需要的数据复制一个没有“位置”的更简单的对象中,并将其存储在您的会话中。

回复:丢失会话上下文,这是因为默认将会话数据存储在内存中,每当应用程序重新启动时就会丢失。如果您希望该状态在应用程序重新启动时保持不变,请查看使用StateServer模式进行会话(尽管如果您希望保持服务器重新启动或在多服务器场中工作,您将需要使用 SQLServer 路由)。

于 2012-10-08T01:54:52.013 回答
-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生成的

于 2014-01-19T02:05:35.383 回答