在MVC3中,如何在我的布局中为登录用户使用Session?

时间:2012-07-23 18:42:36

标签: asp.net-mvc-3 session

一位开发人员和我正在将一个WebForms项目移植到MVC3中,我们是新手。我们已经将WebForms母版页移植到MVC3布局页面,但抛出我们的一件事是登录用户的会话。

在WebForms母版页中,我们检查Session以确保Session(“LoggedInUser”)具有值,如果没有,则重定向到登录页面。

我们不确定如何在MVC3中复制它,我的谷歌搜索已经变得很短。在布局页面中放置这种逻辑似乎有点邪恶,但也许我很疯狂。当然,有一种更好的方法可以做到这一点,而不是在每一种行动方法中都做出这样的检查......如果有人能指出我们正确的方向,我们很乐意潜入并研究。

非常感谢。

3 个答案:

答案 0 :(得分:1)

如果您正在使用表单身份验证,则很可能希望使用授权属性来装饰每个控制器或控制器操作,该属性将为您执行该检查并将用户重定向到已配置登录页面

在c#中,你可以这样做:

[Authorize]
public Controller MyController
{


}

您还可以指定用户或组列表作为属性的参数。登录页面在web.config中指定。

答案 1 :(得分:1)

您所要做的就是在所有控制器上添加[Authorize]标签。如果您尚未登录,它会自动将您重定向到web.config中指定的登录页面。

更好的是,您可以创建一个BaseController,其他控制器将从该BaseController继承。

BaseController

[Authorize]
public abstract class BaseConroller : Controller
{

}

其他控制器

public class HomeController : BaseController
{

}

HomeController中的每个操作都将根据您的FromsAuthentication设置进行重定向。

答案 2 :(得分:1)

如果您正在使用表单身份验证,则可以使用User.Identity.IsAuthenticated检查用户是否已通过身份验证。

示例:

if(User.Identity.IsAuthenticated)
{
    //Do Stuff
}
else
{
     //Redirect to login
}

就个人而言,我使用流畅的安全性来保护我的网站。 http://www.fluentsecurity.net/

希望这有帮助,