phpbar.de logo

Mailinglisten-Archive

[php] SESSIONMANAGEMENT

[php] SESSIONMANAGEMENT

Dennis Sterzenbach lists at darknoise.de
Die Okt 28 22:28:14 CET 2003


christoph lockingen wrote:

Hi Christoph,

Du hast ein generelles Problem in der Programmierung mit PHP.
PHP ist eine Scriptsprache. Pro Request wird jede einzelne Variable,
die Header, die übermittelten Werte in URL, POST, COOKIE, SESSION
etc. ermittelt und entsprechend aufbereitet, der Source Code mit seinen
include,include_once,require,require_once zusammengesteckt und und und.

Sobald das Script seinen Dienst getan hat und am Ende angelangt, sind
diese Daten komplett verloren.

> Also schmeiße ich die in jedem Footer mittels
> $_GET['mysessionid'] rein und kann die dann auch
> mittels $_GET auslesen ... Gerade probiert. Funktioniert nicht...
> 
$_GET ist das Array, was bei JEDEM Request von PHP auf Grund der Daten
in der URL gebaut wird.
Du kannst so viel da rein schmeißen wie du willst, es ist weg, wenn das
Script erneut oder ein anderes geladen wird.
Wenn Du die Session-ID mitschleifen willst, musst du Sie anhängen an
URLS, die von Deinem Script rausgeschrieben werden und auch an
Header("location: ...") muss sie angehängt werden.
Das selbe gilt für $_POST (außer die Herkunft der Infos darin, diese
kommen natürlich aus Formularen, die mit action=POST abgeschickt
wurden).

Wenn Du mal im PHP Handbuch nachgeschaut hättest, und Dir das
durchlesen, was dort steht, wüsstest Du das (RTFM: Read The
Fucking Manual).

Soweit ich weiß kannst Du diesen Zwang umgehen, wenn Du use_trans_sid =1 
in der PHP.ini eingestellt hast.

> PHP kann das nur bedingt automatisch... Sind bei Dir die Cookies aus?
>  session_start();
> Liefert jedesmal eine andere ID, obwohl kein Browserfenster geschlossen
> wurde. Shcalte ich die Cookies in der php.ini wieder ein - funktioniert
> es...
Weil der Browser sich die ID gemerkt hat (über den Cookie)...
> 
> 
> use_trans_sid steht auf eins - gleiches Problem.
> 
Ich würde an Deiner Stelle auch einfach mal die Session Funktionen 
verwenden, dann ginge das auch...


> function lf_session_start()
>  {
>  global $lid;
>  $lid=md5(str_replace('.','/',$IP)).md5( mt_rand (10000,999999)); //
> SESSION_ID
>  }
Was Du hier tust, ist eine SessionID selber generieren.
Entweder, Du kümmerst Dich selber um das SessionHandling, oder Du
benutzt die Funktionalität von PHP... musst Dich entscheiden.

Wenn Du die von PHP nehmen willst: Lies im Handbuch nach.
session_start(), session_register() etc.


Deine Funktion lf_session_id() ist übrigens ziemlich sinnlos,
wozu die (eh globale) Variable $lid zurückliefern?? Totaler Unfug.
Außerdem: Woher soll denn diese Variable kommen?
Das kann so nur funktionieren wenn Du register_globals = on in der
PHP.ini eingestellt hast. Und davon rate ich Dir ab.
$lid ist auch nicht gleich $_GET['lid']. Wenn Du diese Variable
unbedingt verwenden willst, dann setze ihren Wert: $lid = $_GET['lid'].

-- 
   Dennis Sterzenbach
   http://www.darknoise.de/



php::bar PHP Wiki   -   Listenarchive