php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.01.2006, 02:56  
Erfahrener Benutzer
 
Benutzerbild von SvenLittkowski
 
Registriert seit: 05.09.2004
Beiträge: 578
SvenLittkowski zeigte ein beschämendes Verhalten in der Vergangenheit
Standard Session: Verbleibende Zeit anzeigen

Hallo. Und erneut Danke für's Vorbeischauen.

Wie kann ich die verbleibende Zeit der Session dem Besucher bei Seitenaufruf sichtbar machen?

Ich habe meine Session-Lebensdauer so eingestellt, daß sie (ohne vorzeitig vom Besucher beendet zu werden) genau einen Tag lang gültig ist. Auf einigen Seiten kann der Benutzer lange Texte eingeben, solange seine Session gültig ist. Um zu vermeiden, daß er sich die Mühe des Textschreibens macht nur um dann festzustellen, daß alles vergebens (weil expired) war, will ich den Service einer ablaufenden Zeit (JavaScript) einrichten, wozu ich aber ermitteln muß, wie lange die Session noch gültig ist, bevor das JavaScript das Sekundenzählen und -anzeigen übernimmt.

Danke. Mit freundlichen Grüßen,

Sven
SvenLittkowski ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.01.2006, 05:42  
Gast
 
Beiträge: n/a
Standard

Welche Werte hast Du verändert?
session.gc_maxlifetime hat den vermutlich nicht erwünschten Effekt, denn damit ist nur der Zeitraum zwischen zwei Aufrufen gemeint.
 
Alt 02.01.2006, 09:59  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Und die Session-Dauer verlängert sich automatisch?
Du musst dir eben merken, wann du session_start() aufrufst und damit deinen Rückwärtscounter initiieren.
Find die Idee allerdings Quatsch.
Zergling-new ist offline  
Alt 02.01.2006, 10:22  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

session.gc_maxlifetime definiert nicht die Gültigkeitsdauer zwischen zwei Aufrufen, sondern den Zeitraum ab einem letzten Aufruf, nach dem die Daten einer Sitzung als Müll betrachtet werden. Bis dieser allerdings entsorgt wird, kann die Sitzung auch nach Ablaufen dieser Zeitsanne wieder aufgenommen werden.

Es gibt für beide Möglichkeiten (absolute Lebensdauer der Session und Zeitspanne zwischen zwei Aufrufen) folgende Lösung:

Bei jedem Aufruf speicherst du den Zeitstempel (z.B. $_SESSION['session']['atime'] = time() und beim ersten Starten der Session speicherst du diesen zusätzlich (z.B. $_SESSION['session']['start_time']). Zum prüfen der Zeiten addierst du einfach die jeweilige Zeit in der Session mit der jeweiligen Zeitspanne und vergleichst mit dem aktuellen Zeitstempel.

Absolute Laufzeit - (Startzeit - Aktuelle Zeit) ergibt die verbleibende absolute Laufzet in Sekunden und (erlaubte Zeitspanne zwischen zwei Aufrufen) entspricht natürlich bei einem Aufruf der verbleibenden Zeit, falls dieser Wert für dich interessant ist. Ist beides relevant gilt der kleinere Wert.

Von dem Wert ziehst du noch ein wegig ab, um die Übertragungszeiten abzufangen und schreibst ihn in deine JavaScript-Funktion.

Basti
Basti ist offline  
Alt 02.01.2006, 12:07  
Erfahrener Benutzer
 
Benutzerbild von SvenLittkowski
 
Registriert seit: 05.09.2004
Beiträge: 578
SvenLittkowski zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Hm-hm, verstehe.

Es gibt also demnach keine eigene PHP-Funktion (noch nicht), die die verbleibende Restzeit anzeigt?

Ich werde die Idee mit dem Eintragen des Sessionstarts in die Datenbank aufgreifen, und von dort aus die Restzeit kalkulieren.

Danke an alle,

Sven
SvenLittkowski ist offline  
Alt 02.01.2006, 12:08  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Anstatt das Problem dem User zu zeigen, würde ich es lösen.
Zergling-new ist offline  
Alt 02.01.2006, 12:35  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi Sven.

Zitat:
Zitat von SvenLittkowski
Es gibt also demnach keine eigene PHP-Funktion (noch nicht), die die verbleibende Restzeit anzeigt?
Wie gesagt, es gibt weder eine absolute Session-Dauer, die man einstellen könnte, noch eine "normale" Session-Lebensdauer, die zuverlässig wäre. In der Regel wird jedoch auf session.gc_maxlifetime vertraut und, falls du diesen Wert brauchst (die Frage, welchen Wert du denn nun brauchst steht immer noch im Raum), dann kannst du ihn einfach mit ini_get() auslesen.

Zitat:
Ich werde die Idee mit dem Eintragen des Sessionstarts in die Datenbank aufgreifen, und von dort aus die Restzeit kalkulieren.
Schreib den Wert einfach in die Session und nicht in die Datenbank. Wenn die Session futsch ist, brauchst du den Wert auch nicht mehr, deshalb muss er die Sitzung nicht überstehen.

Zitat:
Zitat von Zergling
Anstatt das Problem dem User zu zeigen, würde ich es lösen.
Was hast du? Klar ist doch, dass ein Benutzer immer nur eine gewisse Zeit hat, bevor die Session stirbt - da wäre die Lösung nur der Umstieg auf ein Protokoll, das die Verbindung hält, oder?

Eine andere Möglichkeit ist die, die Session-Lebensdauer sehr hoch anzusetzen und ab dem Verstreichen einer kleineren Dauer einen erneuten Login zu fordern. So bleiben die Daten erhalten, die Sitzung jedoch trotzdem einigermaßen Sicher (falls keine anderen Löcher offen gelassen wurden). Hat den Nachteil, dass womöglich eine ganze Menge nicht mehr benötigter Daten viel länger als nötig auf dem Rechner rumliegen.

Oder eben, die Daten an den Benutzer gebunden in die Datenbank (quasi in eine Tabelle "unfertige Jobs"/"nichtbeendete Wizards" etc.) zu legen und bei erneutem Login von dort aus wieder aufzugreifen.

Basti
Basti ist offline  
Alt 02.01.2006, 12:48  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von Basti
Zitat:
Zitat von Zergling
Anstatt das Problem dem User zu zeigen, würde ich es lösen.
Oder eben, die Daten an den Benutzer gebunden in die Datenbank (quasi in eine Tabelle "unfertige Jobs"/"nichtbeendete Wizards" etc.) zu legen und bei erneutem Login von dort aus wieder aufzugreifen.
Das ist zum Beispiel ein sehr guter Lösungsvorschlag.
Sozusagen ein Recovery. Ich tippe Text, die Session läuft ab, ich schicke den Text ab, der Text wird in die DB unter unfertige Jobs gespeichert, ich darüber benachrichtigt und aber ausgeloggt. Beim erneuten Einloggen komme ich auf die Recovery-Seite und muss den Text erneut senden (mit Hinweis, warum der Text noch NICHT versendet wurde, sonst denkt der User vielleicht, er hat schoneinmal gesendet).
Danke für die Idee, gefällt mir sehr gut.
Zergling-new ist offline  
Alt 02.01.2006, 13:08  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi.

Wichtig wäre nur, dass dem Benutzer auf diese Art und Weise nichts untergejubelt werden kann, auch z.B. bestehende unfertige Aktionen überschrieben werden können. Also entweder muss die Session schon noch laufen, oder aber es wird für das Formular bzw. den Wizard etc. eine ID vergeben, unter der serverseitig die Info gespeichert wird, welcher Benutzer das Formular "geordert" hat. Oder ein Hash aus dem das Programm mit einem serverseitig gespeicherten Schlüssel den Benutzer auslesen kann. Müsste man mal genau durchdenken, welche Angriffspunkte / -fläche welche Lösung bietet und wie man das am besten/sichersten gestalten kann.

Basti
Basti ist offline  
Alt 02.01.2006, 13:12  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hm stimmt, ist ja garnich so einfach den User eindeutig zu identifizieren, wenn die Session schon abgelaufen ist. Das muss dann praktisch bei jedem Seitenaufruf schon vorgreifend passieren. Denn ein gleichbleibender MD5-Hash für jeden User ist ja nichts anderes als eine weitere ID, ob nun ID=5 oder z.B. HASH=2263e7gshshdz2h625 ist ja (fast) egal für einen Angreifer.
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Session Problem karina_02 PHP Tipps 2008 6 18.05.2008 22:37
Problem bei session Lifetime Cyberbob_at_tot PHP Tipps 2007 5 05.06.2007 17:47
session nach seitenwechsel leer... GELight PHP Tipps 2006 8 17.09.2006 15:17
session array Timo Trallala PHP Tipps 2006 18 22.04.2006 13:45
Frage zur Anwendung einer Session mehrfach... GELight PHP Tipps 2006 10 12.03.2006 16:47
[Erledigt] php session problem :( PHP Tipps 2005-2 5 21.10.2005 16:37
Session zeit automatisch auffrischen ? Cyberbob_at_tot PHP Tipps 2005-2 11 29.09.2005 11:03
Bei Session - verfall socke PHP Tipps 2005-2 12 01.09.2005 02:30
Bild zu einer bestimmten Zeit anzeigen PHP Tipps 2005-2 26 31.08.2005 17:13
Session wird nicht angelegt PHP Tipps 2005-2 7 24.07.2005 13:35
Bilder nur zur gewissen Zeit anzeigen lassen!? Kori HTML, Usability und Barrierefreiheit 1 10.07.2005 08:09
Kreieren einer Session PHP Tipps 2005 11 28.05.2005 15:16
verliere Session Sonja PHP Tipps 2005 3 27.04.2005 09:32
[Erledigt] Formulardaten in einer Session speichern, per Link übergeben PHP Tipps 2004-2 2 29.12.2004 15:47
[Erledigt] Hilfe...PhpBB Session Problem!! PHP Tipps 2004-2 2 15.12.2004 18:28

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php verbleibende zeit, php rückwärtscounter, php session restzeit anzeigen, session zeit anzeigen, php session laufzeit auslesen, http://www.php.de/php-tipps-2006/35405-session-verbleibende-zeit-anzeigen.html, php session ablauf ermitteln, zeit rückwärtszähler, php session laufzeit ermitteln, rückwärtscounter, verbleibende zeit php, php session restzeit, php session time auslesen, php session verbleibende zeit, verbleibende zeit anzeigen, php session restlaufzeit, php session restdauer, php session lebensdauer, $_session gc_maxlifetime ausgeben, session laufzeit ermitteln

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:08 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.