kostenloser Webspace werbefrei: lima-city


Rest-Laufzeit einer Session ausgeben?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    digg

    digg hat kostenlosen Webspace.

    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

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    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...
  4. Autor dieses Themas

    digg

    digg hat kostenlosen Webspace.

    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 ?

  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    digg schrieb:
    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 ?!
    Das ist doch auch der Sinn des Timeouts und von Sessions...
    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:
    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 ?
    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.

    Wozu bräuchtest du denn dieses "Timeout für einzelne Variablen"?
  6. Autor dieses Themas

    digg

    digg hat kostenlosen Webspace.

    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.

  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    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.
  8. Autor dieses Themas

    digg

    digg hat kostenlosen Webspace.

    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 :)


  9. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    digg schrieb:
    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 :)
    Schau mal hier nach, da findest du etwas Code zu dem Thema "Daten ohne Submit versenden"...
  10. Autor dieses Themas

    digg

    digg hat kostenlosen Webspace.

    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 ?

  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!