PHP Session Timeout

PHP Session Timeout

am 11.10.2006 11:48:09 von Martin Kaffanke

Hallo!

Neben php verwende ich auch noch python scgi scripts. Ist ein User nun
länger auf Seiten unterwegs die lediglich auf die scgi scripts zugreifen,
so bekomme ich irgendwann bei den php scripts einen Session Timeout.

Wo wird der session timeout gesetzt? Im Cookie? Da meine scgi Scripts
die php session Datei /var/lib/php4/sess_* des Users manipuliert hat diese
eigentlich einen neuen Timestamp. Wie kann ich hier vorgehen, dass PHP
nicht irgendwann meint, die Session wäre ausgelaufen?

danke,
Martin

Re: PHP Session Timeout

am 11.10.2006 11:58:31 von thorny

Martin Kaffanke schrieb:
> Hallo!
>
> Neben php verwende ich auch noch python scgi scripts. Ist ein User nun
> länger auf Seiten unterwegs die lediglich auf die scgi scripts zugreifen,
> so bekomme ich irgendwann bei den php scripts einen Session Timeout.
>
> Wo wird der session timeout gesetzt?

Natürlich in der Konfiguration von PHP. Dort existiert der Eintrag:
session.cookie_lifetime
Welches die Lebeszeit eines Session-Cookies in Sekunden angibt.

Desweiteren gibt es noch diesen Eintrag:
session.gc_maxlifetime
Dieser besagt, nach wieviel Sekunden die gespeicherten Session-Daten auf
dem Server als Müll angesehen werden und vom GC entfernt werden.

Gruß,
Torsten

Re: PHP Session Timeout

am 11.10.2006 14:17:25 von dev-null-use-reply-adress

Martin Kaffanke schrieb:

> Neben php verwende ich auch noch python scgi scripts.

Das dürfte hier mittlerweile bekannt sein. ;-)

> Ist ein User nun
> länger auf Seiten unterwegs die lediglich auf die scgi scripts zugreifen,
> so bekomme ich irgendwann bei den php scripts einen Session Timeout.
>
> Wo wird der session timeout gesetzt? Im Cookie? Da meine scgi Scripts
> die php session Datei /var/lib/php4/sess_* des Users manipuliert hat diese
> eigentlich einen neuen Timestamp.

Keine Ahnung ob das ausreicht. Allerdings hielte ich es für eleganter,
eigene Session-Handler-Funktionen zu schreiben, die Sessions dann z.B.
in einer Datenbank zu verwalten und dann in den Schlangen^Wpython-Scripts
analog zu verfahren.
http://de.php.net/manual/de/function.session-set-save-handle r.php

> Wie kann ich hier vorgehen, dass PHP
> nicht irgendwann meint, die Session wäre ausgelaufen?

Mit den entsprechenden Konfigurationsvariablen - sagte Thorsten ja bereits.


Gruß
JPM

Re: PHP Session Timeout

am 11.10.2006 14:31:44 von Martin Kaffanke

Am Wed, 11 Oct 2006 11:58:31 +0200 schrieb Torsten Zuehlsdorff:

> Martin Kaffanke schrieb:
>> Hallo!
>>
>> Neben php verwende ich auch noch python scgi scripts. Ist ein User nun
>> länger auf Seiten unterwegs die lediglich auf die scgi scripts zugreifen,
>> so bekomme ich irgendwann bei den php scripts einen Session Timeout.
>>
>> Wo wird der session timeout gesetzt?
>
> Natürlich in der Konfiguration von PHP. Dort existiert der Eintrag:
> session.cookie_lifetime
> Welches die Lebeszeit eines Session-Cookies in Sekunden angibt.

Ja, das ist mir bekannt. Ist aber eine unsaubere Lösung.

> Desweiteren gibt es noch diesen Eintrag:
> session.gc_maxlifetime
> Dieser besagt, nach wieviel Sekunden die gespeicherten Session-Daten auf
> dem Server als Müll angesehen werden und vom GC entfernt werden.

Auch das ist mir bekannt. Wäre auch bloß ein workarround.

Die Frage ist: Wo speichert PHP, wann der letzte Zugriff war? In der
session datei nicht, zumindest nicht durch die mtime der datei. Im Cookie
auch nicht, soweit ich das beim lesen des Cookies sehen kann. Aber
irgendwo muss php doch wissen, wann der letzte Zugriff auf diese Session
stattgefunden hat.

Ein besseres Workarround wäre für mich eventuell, dass man beim scgi
script alle 5 Minuten (Hausnummer) ein PHP script mittels Status 307
Location /update_phpsession.php aufruft, welche mich dann wieder auf mein
scgi script zurückschickt.

Aber ich würds sonst gerne direkt im System lösen, wenns irgendwie geht.
Also beim Zugriff genau dort einen Update machen, wo PHP das auch macht.

lg,
Martin

Re: PHP Session Timeout

am 11.10.2006 14:41:52 von Claus Reibenstein

Martin Kaffanke schrieb:

> Wo wird der session timeout gesetzt? Im Cookie?

Du suchst session_set_cookie_params().

Gruß. Claus

Re: PHP Session Timeout

am 11.10.2006 14:56:50 von thorny

Martin Kaffanke schrieb:

>>>Neben php verwende ich auch noch python scgi scripts. Ist ein User nun
>>>länger auf Seiten unterwegs die lediglich auf die scgi scripts zugreifen,
>>>so bekomme ich irgendwann bei den php scripts einen Session Timeout.
>>>
>>>Wo wird der session timeout gesetzt?
>>
>>Natürlich in der Konfiguration von PHP. Dort existiert der Eintrag:
>>session.cookie_lifetime
>>Welches die Lebeszeit eines Session-Cookies in Sekunden angibt.
>
> Ja, das ist mir bekannt. Ist aber eine unsaubere Lösung.

Warum?

>>Desweiteren gibt es noch diesen Eintrag:
>>session.gc_maxlifetime
>>Dieser besagt, nach wieviel Sekunden die gespeicherten Session-Daten auf
>>dem Server als Müll angesehen werden und vom GC entfernt werden.
>
> Auch das ist mir bekannt. Wäre auch bloß ein workarround.

Warum?

> Die Frage ist: Wo speichert PHP, wann der letzte Zugriff war?

Um konkreter zu werden: Warum schlägst du nicht im Handbuch nach? Vor
kurzem erst hast du dich als wahrer PHP-Experte dargestellt und jetzt
bist du nicht mal in der Lage, so etwas einfaches herauszufinden?

> In der
> session datei nicht, zumindest nicht durch die mtime der datei.

Das Handbuch sagt:
"Seit PHP 4.2.3 wird mtime (modified date) anstatt atime verwendet. Sie
werden also keine Problem mit Dateisystemen haben, bei denen atime nicht
zur Verfügung steht."

Ich glaube dem Handbuch mehr als dir.

> Ein besseres Workarround wäre für mich eventuell, dass man beim scgi
> script alle 5 Minuten (Hausnummer) ein PHP script mittels Status 307
> Location /update_phpsession.php aufruft, welche mich dann wieder auf mein
> scgi script zurückschickt.

Statt einem Workarround wäre eine sinnvolle Verwendung wohl die
einfachste Lösung...

Gruß,
Torsten