当我以用户身份登录并url http://localhost:50562/Home/Index
在地址栏中输入 时,浏览器会将我带到登录页面,这是我的主页,但有趣的是消息“欢迎,用户!” 和注销链接仍然在右上角。当我单击导航栏中的其他链接时,会话正常继续,这意味着我从未退出过。
当我在登录时访问 Home 控制器时,有人可以告诉我如何配置路由引擎以将我带到另一个页面吗?
当我以用户身份登录并url http://localhost:50562/Home/Index
在地址栏中输入 时,浏览器会将我带到登录页面,这是我的主页,但有趣的是消息“欢迎,用户!” 和注销链接仍然在右上角。当我单击导航栏中的其他链接时,会话正常继续,这意味着我从未退出过。
当我在登录时访问 Home 控制器时,有人可以告诉我如何配置路由引擎以将我带到另一个页面吗?
您可以通过修改帐户控制器中登录的 POST 方法来实现这一点(假设您使用的是 MVC 4 及其使用的简单成员)。
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
...
}
您可以通过几种方式设置路由。
祝你好运。
您所描述的发生是因为在启动重定向到主页之后才读取用户cookie。当用户可能进入不同的页面时,初始化您的会员提供者的最佳方式是使用全局过滤器。
您可以在 App_Start 文件夹中 FilterConfig 类的 RegisterGlobalFilters 方法中为 SimpleMembership 提供程序添加此功能
filters.Add(new YourAppNameSpace.Filters.InitializeSimpleMembershipAttribute());
使用过滤器使您不必在控制器类中重复使用装饰器。添加装饰器很容易被忽略,当它们不存在时,您的网站将出现意想不到的错误。
感谢您的回答,但似乎该项目一直有一个SessionObject
类,由控制器处理。我不是该项目的原作者,所以我花了一段时间才弄清楚。我的任务是给它一些额外的功能和错误修正。
我遇到了这个方法:
#region getSessionObject()
protected SessionObject getSessionObject() {
SessionObject loReturnValue = null;
if (Session[SessionObject.SESSION_CONSTANT] != null)
loReturnValue = (SessionObject) Session[SessionObject.SESSION_CONSTANT];
return loReturnValue;
}
我只需要调用我的家庭控制器的索引操作来检查用户是否登录。