2015-09-28 1 views
0

tout d'abord im un débutant dans ASP.NET et si désolé si cette question est stupide! J'ai créé un système de connexion en utilisant des variables de session si le nom d'utilisateur/mot de passe correspond aux données de la base de données! Le problème est que si im capable de se connecter je ne peux pas LOGOUTASP.NET MVC4 LogOff ne fonctionne pas

// 
    // POST: /Account/LogOff 

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

le code ci-dessus est de la 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>} 

et ce qui précède est de la _partialLogin

Mon problème est que lorsque je presse logOff le site saute juste la partie LogOff du contrôleur et la session n'est pas effacée, ce qui signifie que je suis encore connecté en tant qu'utilisateur je vous remercie pour votre aide

EDIT: ici est le contrôleur de la page de connexion dans le cas où il est nécessaire:

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

Répondre

1

Vous n'êtes pas mise en FormsAuthentication cookie et pour cette raison, vous ne pouvez pas atteindre votre action LogOff.

Vous aurez besoin pour décorer votre action LogOff avec [AllowAnonymous] attribut ou cookie d'authentification mis lors de la connexion réussie

FormsAuthentication.SetAuthCookie(user.Username, false); 

EDIT:

Je vous suggère de vérifier l'authentification des utilisateurs avec User.Identity.IsAuthenticated plutôt que vérifier l'existence d'une session. De plus, vous pouvez stocker vos variables de session dans un seul objet personnalisé, puis stocker cet objet dans une seule session. Il sera plus facile de suivre vos sessions dans la dernière étape du projet :)

+0

vous êtes incroyable! merci :) –

+0

Vous êtes les bienvenus :) – Robert