Laden...

Session abgelaufen

Erstellt von msycho vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.224 Views
M
msycho Themenstarter:in
234 Beiträge seit 2007
vor 16 Jahren
Session abgelaufen

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?

140 Beiträge seit 2007
vor 16 Jahren

Hallo!

  1. Meinste Session Timeout?
  2. Warum willst du keine schon dafür vorgesehene Klasse verwenden?

Viel Erfolg (mit wenig Aufwand),
Sisyphus

K
95 Beiträge seit 2007
vor 16 Jahren

Vielleicht den Session Timeout in der web.config verändern.

Edit: 2 lame 😉

M
msycho Themenstarter:in
234 Beiträge seit 2007
vor 16 Jahren

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" />

1.130 Beiträge seit 2005
vor 16 Jahren

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

M
msycho Themenstarter:in
234 Beiträge seit 2007
vor 16 Jahren

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?

J
222 Beiträge seit 2006
vor 16 Jahren

eine frage

wo kann ich den pfad einstellen an den weitergeleitet wird sobald die session abgelaufen ist ?

P
554 Beiträge seit 2005
vor 16 Jahren

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!