MVC会话可能不会保存。可能将内容转储到页面?

时间:2013-08-20 09:21:21

标签: c# asp.net-mvc session asp.net-mvc-4 razor

当我尝试执行安全操作时,我的MVC网站出现问题,我从AD获取了一个组列表,将它们与用户进行比较,然后尝试创建一个自定义安全对象,然后我保存到Session

然后,此Session用于确定用户是否可以查看页面。它在我的本地开发环境中工作正常,但在我的测试系统(单独的框)中它不起作用,我得到拒绝访问(如果用户不是特定组的成员,则按预期方式)。

代码不会抛出任何错误,但是当我尝试检索我的SECURITY_ACCESS对象的会话时,它似乎找不到任何错误。

为了检查会话是否是临时填充的,我是否可以将会话的全部内容转储到页面?

在我的View中,对于AccessDenied控制器,我得到了以下内容,但是虽然它说会话中有一个对象但实际上并没有输出它。

@foreach (string item in Session.Keys)
{
<tr>
<td>
<strong>Session: </strong>@Html.DisplayFor(m => item))
</td>
</tr>
}

我开始用这个问题解决问题,因为我无法理解为什么它不能在Test中工作。

1 个答案:

答案 0 :(得分:0)

我强烈建议您不要将安全组件放在会话中。我还鼓励你不要推出自己的授权系统。相反,使用MVC内置的安全组件。这里有组件概述:http://www.asp.net/mvc/overview/security。内置的AuthorizeAttribute可与Windows Auth一起使用,以指定应该有权访问页面的AD组,如下所述:http://msdn.microsoft.com/en-us/library/gg703322(v=vs.98).aspx

回答你的问题:

HttpSessionState令人讨厌地难以使用;我希望它只是实施IDictionary<string,object>。无论如何,这是将会话转储到页面的一种有点冗长的方式。

@{
    var sessionItems = Session.Keys.OfType<string>().ToDictionary (k => k, k => session[k]);    
    var json = Newtonsoft.Json.JsonConvert.SerializeObject(sessionItems, Newtonsoft.Json.Formatting.Indented);
}
<pre>
    @Html.Raw(json);
</pre>