• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Session-Lebensdauer bestimmen

Status
Für weitere Antworten geschlossen.

kahremst

Neues Mitglied
Hi!

Wie kann ich festlegen, wie lang eine Session leben soll?

Ich habe das auch schon in einem anderen Forum gefragt, aber keine eindeutige Antwort erhalten... deshalb frage ich dies hier jetzt auch, in der Hoffnung, dass mir hier kompetenter Weitergeholfen werden kann ^^

Schonmal im Voraus: Vielen Dank!

Gruß Stefan


Folgende Informationen habe ich in dem anderen Forum erhalten...


mir schrieb:
kann mein problem mit session.gc_maxlifetime gelöst werden? ist das die einstellung, die ich dazu ändern müsste?
der mir antwortenden Person schrieb:
Moin Stefan,

wen du sie benutzen kannst, dann ja: http://de.php.net/manual/en/ref.session.php#ini.session.gc-maxlifetime

An sonsten wäre da noch die Möglichkeit, das du zusätzlich einen Timstamp in die Session speicherst und dann kontrollierst ob dieser im Rahmen deiner Wünsche gültig ist.

Ein beispiel für die Gültigkeit von einer Stunde
Code:
<?php
  session_start();
  // $_SESSION['timestamp']=time();
  if($_SESSION['timestamp'] >= (time()-3600)){
     echo 'Session g&uuml;ltig! <br>';
     }
     else{ session_unset();
           session_destroy();
           echo 'Session ist "abgelaufen" (&auml;lter als eine Stunde)'; 
          }
?>

vielelicht reicht dir das ja schon !?

Gruß Dragonl
mir schrieb:
um die variante mit deinem code-bsp zu nehmen muss ja die "session.gc-maxlifetime" trotzdem erstmal hochgestellt werden, oder? weil wenn die session gekickt wird weil zu lang nichts passiert ist, bringt ja auch dann die abfrage nix, oder?
der mir antwortenden Person schrieb:
Öhm.. joa, stimmt, hast Recht !
Von der Seite aus habe ich das noch gar nicht betrachtet !
Per dafault ist "session.gc-maxlifetime" ja auf 1400s (24Min) eingestellt, danach sollten sie ungültig und gelöscht sein.
Ich guck mal "Morgen" was nach den 24 Min passiert, weil ich glaube ich war mit meinem Session-Login schon drüber (max30Min) aber ich kann mich da auch irren (wohl warscheinlich).

Oh... in 7 Min ist meine Login wieder ungültig, ich warte mal eben...

Hm... bei 2Min Restzeit und vergangenen 28Min sollte ich ja raus sein, bins aber nicht gewesen !?
"session.gc-maxlifetime" steht bei mir übrigens auch auf default.

Ich guck doch "Morgen" mal weiter ob ich mehr finde.



EDIT EDIT EDIT

So...also "gc_maxlifetime" bestimmt schon die Lebensdauer der Session, allerdings bezieht sich das auf die Lebendauer die von der "Garbage Collection" (gc) geprüft wird. Der GC wird durch "session_start()" bei einer Warscheinlichkeit von "gc_probability"/"gc_devisor"% initzialisiert.
gc_probability = 1
gc_devisor = 100
= 1/100 (ein hunderstel von 1 ...und nicht 1 durch 100 wie ich dauernd dachte)
= 1%
Somit haben wir bein setzen von session_start() eine 1%ige Chance die Garbage Colletion zu starten, wobei zubeachten ist, das erst die eigene Session geprüft und somit aktualisiert wird und die Session des ausführende Script nicht gelöscht werden kann.

Bei mir steht der Divisor übrigens auf 1000 und weil ich halt der einzigste User auf meinem Rechner bin, habe ich den GC wohl nie gestartet

Das ganze habe ich auf dieser Seite gefunden: http://www.captain.at/howto-php-sessions.php
Dort finded man auch ein Beispiel wie man die Maxlifetime einer Session erhöhen kann, allerdings wird dazu die Funktion ini_set() verwended die bei meinem derzeitigm Hoster deaktiviert ist, was bestimmt auch kein Einzelfall sein wird.

Ist das richtig, das man nun damit Rechnen muss das die Sessions bereits nach gc_maxlifetime gelöscht worden sein könnten !?
mir schrieb:
wenn ich das jetzt richtig verstanden habe, ist es mehr oder weniger nur zufall, ob die Garbage Collection ausgeführt wird bzw die sessions gelöscht werden oder nicht, oder?

ich habe ja so eine selbst gebastelte abfrage für einen "rausschmiss" nicht in meinem quellcode drin, d.h. die session bleibt so lange aktiv (und ich eingeloggt), bis diese von "Garbage Collection" gelöscht wird, oder?

wenn ich das richtig aus dem englischen text rausgelesen habe, muss man um das löschen der sessions durch "Garbage Collections" zu verhindern, den session save path ändern, oder?
der mir antwortenden Person schrieb:
Hm.. ich weis es leider selber nicht genai ! Mit den standard Einstellungen von PHP ist es ja eine Chance von 1%, bei 100 Usern also einer der es ausführt.
Dazu kommt noch, das es ja reicht, wenn einer es innerhalb der 24Minuten ausführt. Ich könnte mir aber vorstellen, das es bei einem gut besuchtem Hoter zu vieln mehr als nur 100 Besuchern in 24Minuten kommen kann - das heist das der GC dann sogar öffters ausgeführt wird !?

Wenn die Session-Datei an einem anderem Ord als dem Standard Platz gespeichert wird, wird sie vom GC nicht gelöst, weil dieser nur am Standard-Ort sucht. Das könnte man machen wenn man den session.save_path ändern kann.

Wenn du die Session nicht selber für ungültig erklärst wird sie erst vom GC gelöscht, richtig ! *glaube_ich_jedenfalls* ^^
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben