Selbstgebaute Session-Expiry

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Selbstgebaute Session-Expiry

    Hallo liebe Leute!

    Ich hatte vor ner ganzen Weile schonmal gefragt, wieso die Session auf meinem WebSpace einfach nicht auslaufen will. Da hattet ihr mir dann geraten, ich soll mir halt soeine Art eigene Session-Expiry baun, indem ich die Zeit der letzten Aktion mit der aktuellen Zeit vergleiche, und dann die differenz der beiden mit nem Grenzwert der nicht überschritten werden darf. Das hab ich jetzt auch gemacht.

    Ich habe eine Datei dologin.php, in der die Session-Variablen wie folgt gesetzt werden:

    PHP-Code:
    // Sitzungsvariablen setzen
                // Auswahl der Daten
                
    $arr mysql_fetch_array(mysql_query("SELECT * FROM accounts WHERE nick = '$nick';"));
                
    $expiry mysql_fetch_array(mysql_query("SELECT * FROM einstellungen WHERE einstellung='time_session';"));
                
    // Variablen registrieren (Session wird gültig für den Login)
                
    session_register("id");
                
    session_register("nick");
                
    session_register("email");
                
    session_register("regdate");
                
    session_register("laston");
                
    session_register("lastact");
                
    session_register("expiry");
                
    // Werte in Variablen schreiben
                
    $_SESSION['id'] = $arr['id'];
                
    $_SESSION['nick'] = $arr['nick'];
                
    $_SESSION['email'] = $arr['email'];
                
    $_SESSION['regdate'] = $arr['regdate'];
                
    $_SESSION['laston'] = $arr['laston'];
                
    $_SESSION['lastact'] = time();
                
    $_SESSION['expiry'] = $expiry['wert'];

                
    debInf("Alle Sessionvariablen OK"); 
    Soweit so gut, bis hierhin funktoiniert wohl auch alles. Allerdings habe ich dann in der nächsten Datei (loggedin.php) eine solche Abfrage eingebaut, damit ich prüfen kann ob die Zeit überschritten wurde:

    PHP-Code:
      session_start();

      
    head();

      function 
    isLoggedIn() {
        
    $nick $_SESSION['nick'];
        
    $lastact $_SESSION['lastact'];
        
    $expiry $_SESSION['expiry'];
        
    $now time();
        
    $diff time() - $lastact;
        echo 
    "Nick: $nick<br />Lastact: $lastact<br />Expiry: $expiry<br />Now: $now<br />Diff: $diff<br />";
        return ((isset(
    $_SESSION['nick']) && (time() - $_SESSION['lastact']) < $_SESSION['expiry']));
      }

      if (
    isLoggedIn()) { 
    Die ganzen Variablen-Umspeicherungen und das echo sind natürlich unprofessionell, sollten aber nur sein um zu sehen ob was mit den Zahlen nicht stimmt, und so ist es tatsächlich auch, undzwar wird folgendes auf der Seite ausgegeben:

    Nick: ArSeN
    Lastact: 1144920273
    Expiry: 20
    Now: 1144920273
    Diff: 0

    Das Problem ist also: Der "LastAct" (Letzte Aktion) ist immer gleich der Zeit time() logisch, hab ich in dologin.php ja auch so gesetzt. Aber eigentlich dachte ich mir das nur so, dass er dann den Rückgabewert in der Session-Variable speichert, und nicht die ganze Funktion ôO - wonach es momentan aber doch start aussieht.

    Also dann, wäre nett wenn mir da jemand weiterhelfen kann, ich weiß nich wie ich das anstellen soll. Danke schonmal!

    Mit freundlichen Grüßen

    ArSeN
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

  • #2
    session_register ist alt und überflüssig, siehe manual. das ist aber nicht der fehler.

    den gibt es auch soweit ich sehen kann gar nicht wirklich.

    das script dologin leitet doch vermutlich direkt auf die nächste seite weiter. dass dies innerhalb der selben sekunde geschieht, sollte man doch eigentlich von seinem webserver erwarten können. alles andere wäre wohl eine zumutung.

    navigiere mal ein bisschen durch die anderen seiten. sind die beiden werte dann immer noch gleich?

    Kommentar


    • #3
      Hi!

      Ja sind sie... ich bin ein Idiot sorry

      Mir is gestern abend aufgefallen, dass ich schonmal vor ner ganzen Weile fast das gleiche in die Funktion head() eingebaut hatte - das Script lag dann ne Weile und ich hab inner zwischenzeit vergessen das ich das schon hab. Das war der einzige Fehler!

      Danke dir trotzdem! Bis zum nächsten mal! *g* (Bestimmt ^^)
      Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

      Kommentar

      Lädt...
      X