【发布时间】:2012-12-09 16:14:51
【问题描述】:
我正在开发一个使用 Webmatrix 进行身份验证的 ASP.Net MVC 4 应用程序。我的 web.config 文件中有以下内容
<sessionState mode="SQLServer" cookieless="true" allowCustomSqlDatabase="true"
sqlConnectionString="Data Source=server;Initial Catalog=ASPState;Persist
Security Info=True;User ID=user;Password=password"
timeout="2880" sqlCommandTimeout="10" />
我可以看到正在填充 ASPState 数据库,但我仍然在 URL 中获取会话 ID。当我尝试通过 Chrome 访问它时,它会错误地指出许多重定向。当我通过 IE 访问它时,即使我看到它重定向(尽管会话 ID 在 url 中),它仍然有效,但是当我尝试登录时出现以下错误:
无法序列化会话状态。在“StateServer”和“SQLServer”模式下, ASP.NET 将序列化会话状态对象, 结果是不可序列化的对象或 MarshalByRef 对象 不允许。如果类似的序列化,同样的限制适用 由自定义会话状态存储在“自定义”模式下完成。
我没有对 Webmatrix 进行任何自定义,这都是默认设置。我需要会话 ID 远离 URL 并使用数据库,就像我在 web.config 文件中设置的那样
【问题讨论】:
-
此消息告诉您,您尝试添加无法序列化的会话类 - 例如 Dictionary 无法保存在会话中,或者您可能没有的其他具有类的列表使用 [Serialization] 关键字。
标签: asp.net asp.net-mvc asp.net-mvc-4 forms-authentication session-state