Asp.net URL中模式设置为“的会话ID”;SQLServer";
我正在开发一个ASP.NETMVC4应用程序,它使用Webmatrix进行身份验证。我的web.config文件中有以下内容Asp.net URL中模式设置为“的会话ID”;SQLServer";,asp.net,asp.net-mvc,asp.net-mvc-4,forms-authentication,session-state,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Forms Authentication,Session State,我正在开发一个ASP.NETMVC4应用程序,它使用Webmatrix进行身份验证。我的web.config文件中有以下内容 <sessionState mode="SQLServer" cookieless="true" allowCustomSqlDatabase="true" sqlConnectionString="Data Source=server;Initial Catalog=ASPState;Persist S
<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并使用DB,就像我在
web.config
文件中设置的那样。首先,尝试将cookieless设置为false。第二,当使用ASPState时,allowCustomSqlDatabase应设置为false,第三,不要在连接字符串中指定初始目录。SQLState将在后台自动执行此操作。第四,我不知道您试图序列化的是什么,但是您应该将[Serializable]
属性放在您试图存储在会话中的类之上
至于URL字符串中的会话id,您使用的是IIS还是IIS Express?IIS使用一个小实用程序
aspnet\u filter.exe
接受带有会话id的URL,并在内部将您重定向到正确的地址。当它将信息返回给您时也是如此。URL再次经过修饰过程。但是,我不确定IIS Express是否使用该实用程序。在某种程度上,在开发人员机器上关闭Cookie并没有太大意义。此消息告诉您,您尝试添加无法序列化的会话类-例如,无法在会话上保存字典,或者使用可能不使用[Serialization]的类的其他列表关键字.+1,用于深入了解aspnet_filter.exe。我在寻找IIS是否将每个包含会话ID的url视为不同的url。谢谢