Cal*_*ass 7 c# forms-authentication asp.net-session asp.net-mvc-3
我有一个使用Form的身份验证的应用程序,当用户登录时,我检索用户的实际名称并将其分配给会话变量,如下所示:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
Session["Name"] = client.GetName(model.UserName);
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToAction("Index", "Home");
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,它会显示在我的索引视图中,如下所示:
<h3>Welcome, @Session["Name"]</h3>
Run Code Online (Sandbox Code Playgroud)
所以,如果我的名字是鲍勃,它会在我的视图中输出"欢迎,鲍勃",这很好.但是,一旦我离开页面或关闭我的浏览器并在几分钟后返回,似乎这些Session变量已被销毁,因为它只是输出"欢迎",但我仍然登录,所以我的会话没有被销毁?我在web.config中将会话设置为在60分钟后销毁:
<sessionState regenerateExpiredSessionId="true" timeout="60" />
Run Code Online (Sandbox Code Playgroud)
只有当我在登录时检查"记住我"框时才会发生这种情况,因为我猜这会保留一个cookie客户端,因此当我重新打开浏览器时我仍然登录但是创建了一个新的会话ID,因为我Response.Write(Session.SessionID)在我的我关闭浏览器之前的索引页面和ID与我重新打开它时的ID不同.如果我不检查我的"记住我"框,那么在重新打开浏览器时我将被迫再次登录
小智 5
我的会话变量遇到了同样的问题.如果在登录时选择了"记住我"选项,它将绕过我的代码以设置下次用户访问该站点时所需的会话变量.
如果IsAuthenticated为true,我可以通过重新填充会话变量来解决我的问题.
protected void Session_Start(object sender, EventArgs e)
{
if (User.Identity.IsAuthenticated)
{
Session["Name"] = client.GetName(User.Identity.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20613 次 |
| 最近记录: |