Hallo!
Ich habe eine Form wo der User Name und Passwort eingeben muss. Nach erfolgreicher Kontrolle wird eine Session angelegt:
//...//
activateUser(tbName.Text, (Convert.ToBoolean(status)));
//...//
[WebMethod(EnableSession = true)]
private void activateUser(string strValue, bool admin)
{
Session["uname"] = strValue;
if (admin)
Session["admin"] = admin;
}
Die Kontrolle läuft wie folgt:
if (checkUser.IsUserLoggedIn(Session["uname"]) == false)
{
Response.Redirect("~/login.aspx");
}
//...//
[WebMethod(EnableSession = true)]
public static bool IsUserLoggedIn(object sessionName)
{
if (sessionName != null)
{
String uname = sessionName.ToString();
if (uname.CompareTo(String.Empty) != 0)
return true;
else
return false;
}
else
return false;
}
Ich habe jetzt eine Unterseite mit mehreren Textboxen. Diese werden beim Load entsprechend gefüllt mit Strings, die aus einer XML ausgelesen werden.
Bin ich "zu lange" (manchmal 5 Sek., manchmal 30 Sek.) auf der Seite und speicher dann meine Änderungen, bin ich auf einmal wieder ausgeloggt, sprich meine Session ist abgelaufen.
Habt Ihr irgendeine Anregung wie ich dieses Problem beheben kann?
Hallo!
Viel Erfolg (mit wenig Aufwand),
Sisyphus
Vielleicht den Session Timeout in der web.config verändern.
Edit: 2 lame 😉
Ich arbeite doch mit SessionState.
http://www.aspheute.com/artikel/20010627.htm
Ich hab das Timeout mal mit 60 deklariert.
So richtig?
<sessionState timeout="60" />
Das Timeout ist korrekt gesetzt. Aber warum verwendest du eine eigene Lösung, wenn dir ASP.NET bereits eine anbietet - die noch dazu nicht so fehleranfällig wie deine ist:
http://blog.veloursnebel.de/PermaLink,guid,182727cc-5d60-4358-9400-39db0a0554c5.aspx
Von dieser Methode wusste ich garnichts, danke.
Ich habe jetzt die web.config erweitert:
<authentication mode="Forms">
<forms
loginUrl="~/path/login.aspx"
defaultUrl="~/path/main.aspx"
timeout="60">
</forms>
</authentication>
<location path="path">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
Der Login läuft nach erfolgreicher Überprüfung wie folgt ab:
Session.Add("uname", tbName.Text);
FormsAuthentication.RedirectFromLoginPage(tbName.Text, false);
"Intern" wird wie folgt kontrolliert:
if (!Request.IsAuthenticated)
{
Response.Redirect("~/administration/login.aspx");
}
String username = (String)Session["uname"];
Logout:
Session.RemoveAll();
FormsAuthentication.SignOut();
So ist das doch korrekt oder?
/EDIT: Für den Benutzernamen lege ich jetzt keine Sessionvariable an. Den Benutzer namen kann ich ja so abrufen:
User.Identity.Name.ToString()
Jetzt ist aber das Problem, dass nach einiger Zeit Session["admin"] leer ist. Kann ich das Problem noch irgendwie beheben?
eine frage
wo kann ich den pfad einstellen an den weitergeleitet wird sobald die session abgelaufen ist ?
Kannst ja immer am Anfang von jeder Seite abfragen ob die Session NULL ist, wenn ja, ein Redirect zur gewünschten Seite.
if(Session["userData"] == null)
Response.Redirect("login.aspx");
Achtung! - Hinter dir ist ein dreiköpfiger Affe!