Bonsoir,
Je solicite votre aide pour un probleme recurent que j'ai et je suis a court d'idee. J'ai fait un site avec une partie administration, avec authentification. J'ai utiliser l'AccountController proposer par defaut par le template ASP.NET MVC (la v3) que j'ai un peu modifier du coup.
Mais lorsque je met un peu de temps a remplir mon billet (plus de 10 minutes) sur ma partie admin, quand j'appuye sur mon bouton creer je reviens a la page de login et j'ai perdu tout mon boulot du coup !
Donc voici quelque morceaux de mon code :
L'action LogOn de l'accountControle (j'ai pas trop fait de changement):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 [HttpPost] public ActionResult LogOn(LogOnModel model, string returnUrl) { if (ModelState.IsValid) { if (MembershipService.ValidateUser(model.UserName, model.Password)) { FormsService.SignIn(model.UserName, model.RememberMe); if (Url.IsLocalUrl(returnUrl)) { return Redirect(returnUrl); } return RedirectToAction("Index", "Admin"); } ModelState.AddModelError("", "The user name or password provided is incorrect."); } // If we got this far, something failed, redisplay form return View(model); }
la methode SignIn dans l'AccountModel (j'y ai fait quelque changement, j'ai laisser l'ancien code en commentaire) :
avec ceci dans le Global.asax :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public void SignIn(string userName, bool createPersistentCookie) { if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName"); var authTicket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(600), createPersistentCookie, "Administrateur", FormsAuthentication.FormsCookiePath); var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket)); if (authTicket.IsPersistent) { cookie.Expires = authTicket.Expiration; } HttpContext.Current.Response.Cookies.Add(cookie); //FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); }
j'ai essayer de mettre ceci dans le Web.Config :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 protected void Application_AuthenticateRequest(Object sender, EventArgs e) { HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; if (authCookie == null || authCookie.Value == "") { return; } FormsAuthenticationTicket authTicket = null; try { authTicket = FormsAuthentication.Decrypt(authCookie.Value); string[] roles = authTicket.UserData.Split(new char[] { ';' }); if (Context.User != null) { Context.User = new GenericPrincipal(Context.User.Identity, roles); } } catch { return; } }
Es-ce que vous voyez un moyens que la session reste active plus plus longtemps ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <sessionState timeout="600"/> <authentication mode="Forms"> <forms loginUrl="~/Account/LogOn" timeout="600" /> </authentication>
Sinon j'ai un deuxieme soucis, j'ai fait une action qui renvois un JSON pour remplir une dropdownlist dynamiquement avec jQuery mais quand je fait une modification du json a renvoyer j'ai l'impression que l'ancien json est garder en cache y'as t-il un moyen de modifier cela ?
Autrement si il y a 2 personne qui se connecte avec le meme compte es-ce qu'elle peuve se deconnecter mutuellement ?
Merci de m'avoir et je vous remercie par avance de votre aide.
Cordialement.
Partager