ASP.NET MVC 3 - Umgang mit Session-Variablen
Habe ich eine app, die verwendet Form ist die Authentifizierung und das Benutzer-log-in, das ich des Benutzers abrufen tatsächlichen Namen und weisen, dass eine session-variable, in etwa so:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
Session["Name"] = client.GetName(model.UserName);
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToAction("Index", "Home");
}
}
}
Dieser wird dann auf meine Index-Ansicht, etwa so:
<h3>Welcome, @Session["Name"]</h3>
Also, wenn mein name war Bob, er würde die Ausgabe "Willkommen, Bob" auf meine Ansicht und dies funktioniert gut. Aber sobald ich navigieren Weg von der Seite oder schließen des Browsers und kehren ein paar Minuten später, es scheint, als ob die Session-Variablen wurden zerstört, wie es nur Ausgänge "Willkommen", aber ich bin immer noch angemeldet, damit meine session nicht zerstört? Ich habe eingestellt, dass die session zerstört, nachdem 60 Minuten in meiner web.config:
<sessionState regenerateExpiredSessionId="true" timeout="60" />
Bearbeiten
Passiert das nur, wenn ich meine "an Mich Erinnern" box bei der Anmeldung, wie ich denke, das hält ein cookie client-Seite, also wenn ich Sie wieder öffne mein browser Im noch angemeldet, aber eine neue session-ID angelegt, ich habe eine Response.Write(Session.SessionID)
auf meiner Index-Seite und die ID bevor ich geschlossen, mein browser war anders als die, wenn ich Sie wieder öffnete. Wenn ich nicht prüfen, mein "an Mich Erinnern" box bin ich dann gezwungen, sich wieder auf re-opening meinem browser
- Ist die Website läuft auf shared host?
- Nop, seine auf meinem IIS-interne
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem mit meinen session-Variablen. Wenn Sie die remember me-option ausgewählt wurde, bei der Anmeldung umgehen würde, meinen code für das setzen der session-variable die ich brauchte, das nächste mal der Benutzer auf die Website gehen.
Konnte ich lösen mein Problem durch das repopulating die session-variable, wenn die IsAuthenticated wahr war.
Anstatt den Namen in einer session-variable, ändern Sie einfach die folgende
zu
Können Sie dann verwenden Sie einfach die Benutzer.Identität.Namen statt des @Session["Name"].
Das Problem, das Sie haben, ist mit der Linie
Dies ist ein cookie und länger als Sitzungen (je nachdem, wie lange setzen Sie die Formen timeout)
Wenn alles, was Sie brauchen, ist nur die Anzeige der Benutzernamen, die Sie verwenden können, und entfernen Sie einfach die Sitzung insgesamt
<forms loginUrl="~/Account/LogOn" timeout="60" /
ich auch eine session-variable in einem anderen Ort auf der Baustelle und bin mit dem gleichen Problem, so Frage ich mich, was es bewirktdieser code sollte funktionieren, und Sie sollten in der Lage sein zu sehen
"Welcome USERNAME"
versuchen, um zu sehen, ob die IE-Einstellungen wietools-->internet options-->General
Registerkartedelete my browsing history
aktiviert ist oder nicht. (auf der gleichen Registerkarte klicken Sie auf die Schaltfläche löschen sehen Sie seine cookies löscht auch das könnte also sein Problem).Cookies-Werte werden beibehalten, wenn Sie den browser schließen, aber nicht Sitzung(inproc) Variablen.
Vielleicht zuerst überprüfen, um sicherzustellen, dass eine neue Sitzung noch nicht gestartet, irgendwie. Legen Sie einen Haltepunkt in der
Session_Start
imglobal.asax.cs
Datei:Es mag albern, aber es gibt ein paar Dinge, die könnte tatsächlich dazu führen, eine neue Sitzung. Beseitigung diese erhalten Sie näher an eine Lösung.
Schließen Sie Ihren browser und öffnen ihn wieder, wird wahrscheinlich dazu führen, dass eine neue Sitzung. Änderungen an der Ordner-Struktur innerhalb Ihrer Website und änderungen an den web.config wird zu einer neuen Sitzung (application pool recycelt werden).