Créer et lire des cookies afin de confirmer l'utilisateur connecté en C# MVC3
J'ai un problème avec les cookies dans MVC3. Je veux créer un cookie qui stocke des informations que l'utilisateur est connecté. Je n'ai jamais utilisé les cookies avant et ne sais pas quelle est la bonne façon de le faire et je suis nouveau sur MVC3.
S'il vous plaît, quelqu'un peut-il me dire si la démarche que j'ai utilisée pour stocker des cookies est bon ou si il y a un risque pour la sécurité (le mot de passe est crypté)?
Si les cookies sont réglés correctement, comment puis-je les utiliser dans d'autres points de vue de vérifier si l'utilisateur est connecté et mis à la session, pour lui?
Si l'approche que j'ai utilisé pour la connexion de l'utilisateur est faux, dites-le moi.
public ActionResult Login(string name, string hash, string keepLogged)
{
if (string.IsNullOrWhiteSpace(hash))
{
Random random = new Random();
byte[] randomData = new byte[sizeof(long)];
random.NextBytes(randomData);
string newNonce = BitConverter.ToUInt64(randomData, 0).ToString("X16");
Session["Nonce"] = newNonce;
return View(model: newNonce);
}
User user = model.Users.Where(x => x.Name == name).FirstOrDefault();
string nonce = Session["Nonce"] as string;
if (user == null || string.IsNullOrWhiteSpace(nonce))
{
return RedirectToAction("Login", "Users");
}
string computedHash;
using (SHA256 sha256 = SHA256.Create())
{
byte[] hashInput = Encoding.ASCII.GetBytes(user.Password + nonce);
byte[] hashData = sha256.ComputeHash(hashInput);
StringBuilder stringBuilder = new StringBuilder();
foreach (byte value in hashData)
{
stringBuilder.AppendFormat("{0:X2}", value);
}
computedHash = stringBuilder.ToString();
}
if (computedHash.ToLower() == hash.ToLower())
{
Session["IsAdmin"] = user.IsAdmin == 1;
Session["IDUser"] = user.IDUser;
ViewBag.IdUser = IDUser;
ViewBag.IsAdmin = IsAdmin;
ViewBag.UserName = model.Users.Where(x => x.IDUser == IDUser).First().Name;
if (keepLogged == "keepLogged")
{
//Set user's cookies - is this correct?
Response.Cookies.Add(new HttpCookie("UserCookie", user.IDUser.ToString()));
Response.Cookies.Add(new HttpCookie("PassCookie", user.Password.ToString()));
}
}
return RedirectToAction("Index", "Posts");
}
- peut-être que vous souhaitez utiliser l'authentification de formulaires?
Vous devez vous connecter pour publier un commentaire.
Ce code crée un cookie crypté avec le nom d'utilisateur
Pour activer l'authentification par formulaires ajouter le texte suivant à la
system.web
section du site web.config:Non,Vous ne voulez pas stocker le mot de passe utilisateur dans un cookie personnalisé. Regardez dans les Formes Authetication. Il fait tout le cookie de travail pour vous. Vous pouvez définir que les formes authetication cookie à persister sur l'ordinateur de l'utilisateur afin qu'ils "rester connecté".
voici mon simlified version comment vous pouvez travailler avec les cookies
pour mémoriser le nom d'utilisateur