Rest-Laufzeit einer Session ausgeben?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfangen
ausgabe
code
eingabe
feld
inhalt
laufzeit
lebensdauer
login
minute
problem
rest
sekunde
server
session
sinn
speichern
start
stunden
url
-
Hallo
wenn ich eine SESSION starte, dann hat die ja eine bestimmte Lebensdauer,
aber wie bekomme ich den Wert, wie lange diese Lebensdauer noch anhält ?
wenn ich Ausgabe mache:
echo "<p>Dauer: " . session_cache_expire() . "</p>\n";
bekomme ich immer 180 (ist wohl in Minuten) als Ergebnis,
auch wenn die Session schon 10 Minuten läuft ....
wie kann ich Ausgabe machen, die mir die Rest-Lebensdauer ausgibt,
also dass nach 10 Minuten in der Ausgabe steht: sowas wie: noch 170 Minuten
muss ich dazu einen timestamp-Wert beim Start der Session speichern,
kann ich per PHP (interne Funktion) die Rest-Lebensdauer direkt auslesen ?
+ wann (timestamp) die aktuelle Session gestartet wurde oder
+ wieviel von den 180 Minuten schon "verbraucht" sind oder
+ wie lange sie noch gültig ist (als Sekunden oder Timestamp)
um auf Session-Inhalte zugreifen zu können,
muss ich ja immer auch session_start() machen,
aber wird dadurch die Laufzeit auch jedesmal neu gestartet? .... nein, oder?
wenn das so wäre, würde ja eine Laufzeit kaum einen Sinn machen.
aber session_cache_expire() gibt mir immer 180 als Wert aus ???
--> Wie kann ich Rest-Laufzeit der Session anzeigen, zum Beispiel bei Login
BSP: .... Dein Login ist noch für 5668 Sekunden aktiv
bzw: .... Dein Login ist noch für 1 Stunde 34 Minuten und 28 Sekunden aktiv
die Formatierung der Zeit Angabe (Stunden/Minuten/Sekunden) ist jetzt nicht das Problem,
sondern erstmal, wie ich überhaupt auf die Rest-Lebensdauer (Wert in Sekunden) komme
gibt es dazu eine PHP interne Funktion, die mir Start-Zeit oder Rest-Zeit ausgibt
... oder muss ich den timestamp beim Login (beim Start der Session) speichern?
gibt es eine fertige Funktion dafür (Beispiel) ?
Danke
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Soweit ich weiß wird die Laufzeit bei jedem session_start() wieder zurückgesetzt. Welchen Sinn hätte es denn wenn das nicht passieren würde?
Die Laufzeit sagt dann wie lang de User inaktiv sein darf bevor die Session beendet wird... inaktiv ist auch eine Seite betrachten.
Wenn du die Lebensdauer jetzt abfragst bekommst du immer die maximale Lebensdauer... -
wenn bei jedem session_start() die Laufzeit wieder zurückgesetzt wird,
dann würde eine Session ja unendlich laufen, solange der User innerhalb der Laufzeit aktiv bleibt ?!
weil um zu Prüfen, ob die Session einen bestimmten Wert hat, braucht man ja auch session_start()
ohne session_start() kann man ja keine Abfrage machen wie
if (isset($_SESSION['pwx']) && $_SESSION['pwx'] == 'geheim') { echo "<p>Passwort ist OK</p>\n"; } else { echo "<p>Passwort ist falsch</p>\n"; }
aber Lebensdauer / Laufzeit heisst für mich, sobald ich der Wert für $_SESSION['pwx'] vergebe,
dann kann ich nur 180 Minuten auf diese Variable $_SESSION['pwx'] zugreifen,
danach sollte diese Session nicht mehr existieren,
also ... isset($_SESSION['pwx']) sollte dann false ergeben, ... oder nicht ?
-
digg schrieb:
Das ist doch auch der Sinn des Timeouts und von Sessions...
wenn bei jedem session_start() die Laufzeit wieder zurückgesetzt wird,
dann würde eine Session ja unendlich laufen, solange der User innerhalb der Laufzeit aktiv bleibt ?!
Entweder der User macht lang genug gar nichts oder der Server beendet die Session vorzeitig mit session_destroy, ansonsten bleibt die Session erhalten.
Normalerweise ist das Timeout nur dafür gut, dass am Server nicht lauter offene Sessions von Usern liegen bleiben die längst nicht mehr aktiv sind.
digg schrieb:
Wenn der Client dazwischen die Session "aufgefrischt" hat indem er deine Seite auf der irgendwo session_start verwendet wird aufgerufen hat wirst du hier wieder ein true bekommen.
aber Lebensdauer / Laufzeit heisst für mich, sobald ich der Wert für $_SESSION['pwx'] vergebe,
dann kann ich nur 180 Minuten auf diese Variable $_SESSION['pwx'] zugreifen,
danach sollte diese Session nicht mehr existieren,
also ... isset($_SESSION['pwx']) sollte dann false ergeben, ... oder nicht ?
Wozu bräuchtest du denn dieses "Timeout für einzelne Variablen"? -
hackyourlife schrieb:
Wozu bräuchtest du denn dieses "Timeout für einzelne Variablen"?
naja, ich dachte halt, das diese Laufzeit nicht jedesmal neu startet
und wollte für eingeloggte User eine Info ausgeben: Dein Login ist noch x Minuten aktiv
aber (wie ich jetzt gelernt habe) startet ja bei jedem session_start() der Timeout wieder neu
also brauche ich das quasi dann doch nicht
oder ich mach die Ausgabe dann hat mit der Info:
Du musst innerhalb der nächsten x Minuten etwas "tun" (klicken) sonst bist du ausgeloggt
Quasi ein Countdown, der anzeigt wie lange der User "inaktiv" bleiben kann,
bis der Login nicht mehr "gültig" ist,
Und so eine Ausgabe müsste dann wohl als JavaScript (Countdown) laufen,
da es ja die Zeit "ohne" Aktivität betrifft, also geht Ausgabe von PHP da nicht
Wenn dann Countdown abgelaufen ist,
könnte man auf Seite weiterleiten ... "LogOut wegen Inaktivität" ... oder so
damit der User dann nicht noch Ablauf noch versucht was zu speichern,
aber die Session garnicht mehr aktiv ist, und seine Eingabe "verloren" geht.
-
Alternativ kannst du auch immer mit AJAX alle 2 Minuten eine Anfrage an den Server stellen um die Session zu verlängern, so wie es auch auf lima-city im Forum der Fall ist.
Damit bleibt ein User der auf der Seite ist eingeloggt und wenn er die Seite für eine gewisse Zeit verlässt (Session-Timeout) wird er erst ausgeloggt, dafür kann er dann dazwischen solange er will eine Seite auch einfach nur betrachten, ohne dabei die Session verfallen zu lassen. -
jo, das ist natürlich ne Idee,
einfach alle paar Minuten den Login (per Ajax im Hintergrund) auffrischen
dadurch entsteht zwar bischen Traffic,
aber so wäre sicher gestellt, dass User-Eingaben nicht "verloren" gehen,
wenn dem User was dazwischen kommt
BSP:
... User schreibt einen Beitrag ...
... bekommt Telefon-Anruf ... soll jemanden abholen fahren
... lässt den angefangenen Beitrag offen, fährt zum Abholen und isst noch ein Eis
... kommt nach 3 Stunden wieder und kann dann Beitrag weiter schreiben und speichern
ohne Session "auffrischen" (im Hintergrund) wären die Eingaben verloren,
weill in der Zwischenzeit die Session abgelaufen wäre, und er müsst von vorn anfangen
aber wer lässt einen angefangenen Beitrag schon 3 Stunden offen
und meist kommt Energiesparmodus vom PC dazwischen und PC geht in den Ruhezustand,
dann bringt Session "auffrischen" auch nix ....
aber (IDEE) ... ich könnte ja den Beitrag selber per Ajax alle 2 Minuten "zwischenspeichern"
und wenn User nicht selber auf Speichern geklickt hat, und ausgeloggt wurde (Session timeout)
dann bekommt er beim nächsten Login die Meldung, dass da noch ein nicht fertiger Beitrag ist,
und er jetzt da weiter machen kann, wo er aufgehört hat ... (bzw. beim letzten Speicher-Zeitpunkt)
also für den Beitrag einen neuen Status einführen,
ob vom User selbst gespeichert (veröffentlicht) wurde,
oder ob "nur" vom System zwischengespeichert, also Beitrag noch in Bearbeitung
ich kenne das Problem selber von anderen Seiten (auch Foren)
manchmal braucht man ja etwas länger um einen Text zu verfassen, auch wenn mal was "dazwischen" kommt
und bis man soweit ist und Speichern will, ist der Login nicht mehr "aktiv" und die ganze mühsame Eingabe ist dann verloren, und man müsste beim nächsten Login wieder bei NULL anfangen .... was (als User) dann sehr frustrierend ist.
Mit so einem "alle x Minuten zwischenspeichern" könnte man zumindest auf die letzte Zwischen-Speicherung zurückgreifen und den Text ab da "weiter" schreiben, und muss nicht nochmal ganz von vorne anfangen ...
in der DB-Tabelle für Beitrag zwei neue Felder machen (Speicher-Status und Zeitpunkt) ist dabei kein Problem,
aber wie bekomme ich den Inhalt aus Formular (mehrere Felder) zum Zwischen-Speichern ohne Submit
also muss sich Ajax die "aktuellen" Inhalte aus den Feldern selber holen .... das könnte ich Hilfe brauchen :)
-
digg schrieb:
Schau mal hier nach, da findest du etwas Code zu dem Thema "Daten ohne Submit versenden"...
aber wie bekomme ich den Inhalt aus Formular (mehrere Felder) zum Zwischen-Speichern ohne Submit
also muss sich Ajax die "aktuellen" Inhalte aus den Feldern selber holen .... das könnte ich Hilfe brauchen :) -
ahh Danke
davon ausgehend müsste ich dann die Funktion send mit meinen Formularfeldern erweitern
und dann noch was bauen, was send() alle x Minuten selber aufführt
geht das auch bei Drop-Down Felder? .... in JS function send()
var category = document.getElementById('form_cat');
für
<select name="cat" id="form_cat">
<option value="category_nr1">Kategorie-Name1</option>
<option value="category_nr2">Kategorie-Name2</option>
<option value="category_nr3">Kategorie-Name3</option>
</select>
also den aktuell (vom User) ausgewählten option-Wert in JS var category ablegen ?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage