首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET MVC4 LogOff不工作

ASP.NET MVC4 LogOff不工作
EN

Stack Overflow用户
提问于 2015-09-28 12:51:19
回答 1查看 99关注 0票数 0

首先,我是ASP.NET的新手,如果这个问题很愚蠢,我很抱歉!

如果用户名/密码与数据库数据匹配,我已经使用会话变量创建了一个登录系统!问题是,虽然我可以登录,但我不能注销

代码语言:javascript
运行
复制
 //
    // POST: /Account/LogOff

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        Session.RemoveAll();
        return RedirectToAction("Index", "Home");
    }

以上代码来自AccountController

代码语言:javascript
运行
复制
@if (Session["LoggedUser"]!=null) {
<text>
    Hello, @Html.ActionLink(Session["Username"].ToString(), "Manage", "Account", routeValues: null, htmlAttributes: new { @class = "username", title = "Manage" })!
    @using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm" })) {
        @Html.AntiForgeryToken()
        <a href="javascript:document.getElementById('logoutForm').submit()">LogOff</a>
    }
</text>} else {
<ul>
    <li>@Html.ActionLink("Register", "Register", "Account", routeValues: null, htmlAttributes: new { id = "registerLink" })</li>
    <li>@Html.ActionLink("Log in", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
</ul>}

上面的内容来自_partialLogin

我的问题是,当我按logOff时,站点只是跳过控制器的LogOff部分,会话没有被清除,这意味着我仍然以用户身份登录--谢谢您的帮助。

编辑:这是登录页面的控制器,以备需要时使用:

代码语言:javascript
运行
复制
  //
    // GET: /Account/Login

    [AllowAnonymous]
    public ActionResult Login(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }

    //
    // POST: /Account/Login

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            DefaultConnection dc = new DefaultConnection();
            var Users = (from c in dc.NonActivated_Users select c).ToList<NonActivated_Users>();
            foreach (NonActivated_Users nua in Users){
                if (nua.Password_Hash == Hasher.HashString(model.Password) && nua.Username==model.UserName){
                    Session["LoggedUser"] = nua;
                    Session["Rights"] = 4; //non activated user
                    Session["Username"] = 0;
                    nua.LastActive = DateTime.Now;
                    dc.SaveChanges();
                    return RedirectToLocal(returnUrl);
                }   
            }
            var Users1 = (from c in dc.User select c).ToList<User>();
            foreach (User au in Users1)
            {
                if (au.Password_Hash == Hasher.HashString(model.Password) && au.Username == model.UserName)
                {
                    Session["LoggedUser"] = au;
                    if (au.Membership == false) {
                        Session["Rights"] = 3; //activated user non premium
                    }
                    else
                    {
                        Session["Rights"] = 2; //activated user premium
                    }
                    au.Last_Active = DateTime.Now;
                    dc.SaveChanges();
                    return RedirectToLocal(returnUrl);
                }
            }
        }

        // If we got this far, something failed, redisplay form
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        return View(model);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-28 13:14:40

您没有设置FormsAuthentication cookie,由于这个原因,您无法到达您的LogOff操作。

您需要使用LogOff属性装饰您的[AllowAnonymous]操作,或者在成功登录时设置身份验证cookie。

代码语言:javascript
运行
复制
FormsAuthentication.SetAuthCookie(user.Username, false);

编辑:

我建议您使用User.Identity.IsAuthenticated检查用户身份验证,而不是检查会话是否存在。除此之外,您还可以将会话变量存储到单个自定义对象,然后将该对象存储到单个会话中。在项目的后期阶段跟踪您的会话将更容易:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32823469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档