Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Session abgelaufen
msycho
myCSharp.de - Member



Dabei seit:
Beiträge: 234

Themenstarter:

Session abgelaufen

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Sisyphus
myCSharp.de - Member

Avatar #avatar-2394.png


Dabei seit:
Beiträge: 140
Herkunft: Hades

beantworten | zitieren | melden

Hallo!

1) Meinste Session Timeout?
2) Warum willst du keine schon dafür vorgesehene Klasse verwenden?
Viel Erfolg (mit wenig Aufwand),
Sisyphus
private Nachricht | Beiträge des Benutzers
kInGpInGoLd
myCSharp.de - Member



Dabei seit:
Beiträge: 95

beantworten | zitieren | melden

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

Edit: 2 lame
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von kInGpInGoLd am .
private Nachricht | Beiträge des Benutzers
msycho
myCSharp.de - Member



Dabei seit:
Beiträge: 234

Themenstarter:

beantworten | zitieren | melden

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" />
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von msycho am .
private Nachricht | Beiträge des Benutzers
.Kai
myCSharp.de - Member

Avatar #avatar-1836.gif


Dabei seit:
Beiträge: 1184

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
msycho
myCSharp.de - Member



Dabei seit:
Beiträge: 234

Themenstarter:

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von msycho am .
private Nachricht | Beiträge des Benutzers
Jabi
myCSharp.de - Member



Dabei seit:
Beiträge: 223

beantworten | zitieren | melden

eine frage

wo kann ich den pfad einstellen an den weitergeleitet wird sobald die session abgelaufen ist ?
private Nachricht | Beiträge des Benutzers
Powerslave
myCSharp.de - Member



Dabei seit:
Beiträge: 557

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers