2015-09-28 13 views
0

прежде всего им новичку в ASP.NET и так жаль, если этот вопрос глуп!ASP.NET MVC4 LogOff не работает

Я создал систему входа в систему, используя переменные сеанса, если имя пользователя/пароль совпадают с данными базы данных! Проблема заключается в том, что в то время как им возможность войти я не могу выйти из системы

// 
    // POST: /Account/LogOff 

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

приведенный выше код из AccountController

@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 контроллера, и сеанс не очищается, что означает, что он все еще зарегистрирован как пользователь благодарю вас за помощь

EDIT: здесь контроллер страницы входа в случае необходимости:

// 
    // 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); 
    } 

ответ

1

Вы не устанавливая FormsAuthentication печенья, и по этой причине, вы не можете достичь ваших действий LOGOFF.

Вам нужно будет украсить ваше действие LOGOFF с [AllowAnonymous] атрибут или набор аутентификации куки после успешной регистрации

FormsAuthentication.SetAuthCookie(user.Username, false); 

EDIT:

Я хотел бы предложить вам проверить аутентификацию пользователя с User.Identity.IsAuthenticated, а не проверка наличия сеанса. В дополнение к этому вы можете сохранить свои переменные сеанса в один пользовательский объект, а затем сохранить этот объект на один сеанс. Будет легче отслеживать ваши сессии на более поздней стадии проекта :)

+0

вы потрясающие! спасибо :) –

+0

Добро пожаловать :) – Robert

 Смежные вопросы

  • Нет связанных вопросов^_^