phpbar.de logo

Mailinglisten-Archive

[php] SESSIONMANAGEMENT

[php] SESSIONMANAGEMENT

Thomas Langfeld opa.thomas at fhtw-berlin.de
Mit Okt 29 15:49:59 CET 2003


> [märchenerzähler]
> es werden ein paar mehr präsenzen auf dem server gehostet, einige
> benötigen
> unbedingt globals=on, also muss es an bleiben

Musst du ja nicht in der php.ini setzen, mach es per .htaccess
-> php_value register_globals "off"

Aber mache es!

>
> > $_GET, $_POST etc. zu dekontaminieren.
>
> in aller bescheidenheit... auf was muss ich in $_GET oder $_POST
> achten? Ein
> Link würde schon genügen, oder eine Kurzinfo... Wenn ich globals=on habe,
> dann habe ich die Möglichkeit, Variablen auf instanzierten Objekten direkt
> zu setzen - oder sind das andere Globals?


> Die SID ist eine
> global? Scheinbar
> nicht, denn "globals haben mit Sessions nichts zu tun".

"SID" ist eine Konstante, die automatisch von PHP gesetzt wird, sobald die
Session-Sachen aktiviert sind.
SID enthält den String session.name.'='.session_id()

Und das $_SESSION-Array ist SUPER-global.

> Nur mal, um mein Gewissen zu erleichtern:
> Wenn ich cookies an habe, dann wird die SessionID im Cookie als String
> gemerkt. An Hand des Cookies kann nun die bisherige Session identifiziert
> werden, da dieser clientspezifisch ist. Wenn ich an Hand der IP gehe,kann
> ich niemanden hinter einem Router dingfest machen. Der ClientPort
> macht auch
> in Kombination mit dem IP keinen Sinn.
>
> Schalte ich nun Cookies ab, wird also bei jedem Scriptstart, in
> welche nicht
> via $_POST['phpsessid'] gekommen ist, durch session_start() eine neue
> Session angefangen, da die alte Variable nicht mehr bekannt ist.

Weiß nicht, WAS du da tust, aber benutze doch einfach die "normale"
Vorgehensweise:
1. session_start()
2. Zugriff aufs Session-Array mit $_SESSION['deine_session_var']

> //SID sollte automatisch angehangen werden
> -> wird Sie, da in PHP.ini so eingestellt

Genau.

>
>
> Es muss doch eine Möglichkeit geben, die Session - statt Sie in jedem Link
> einzufügen - überall einzufügen...

Genau das sollte ja passieren bei use_trans_id

>
> In der PHP.INI geht das wohl in :
>
> (meine Einstellungen)
>
> session.use_trans_sid = 1
> -- brauche ich,wenn ich auf cookies verzichte; hängt die sid an jede url
> an - scheint nicht in kombination mit header("Location... zu funktionieren

Nein, wie auch, das ist ja kein Link.
Aber wer hindert dich daran,
header("Location: scriptfoo.php?" . SID);
zu benutzen?

>
> url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
> -- kann ich nicht rein zufällig erweitern, da Header("Location: .. wohl
> nicht funktioniert

Unwichtig (meistens).

>
> register_globals = On
> -- Sind on, keine Ahnung, ob ich die Wirklich abschalten sollte...

Ja. Brauchst sie nicht, wenn du ordentlich programmierst.

>
> session.use_cookies = 1
> -- ich teste aber clientseitig ohne cookies (cookies abgeschaltet) -
> gleicher effekt aber auch, wenn ich use_cookies auf 0 setzen
> (browsercache+cookiecache leeren!)

Schalts ab (von mir aus auch per .htaccess), dann siehst du, das die Links
automatisch um die session-id erweitert werden.

>
> session.name = PHPSESSID
> -- da kann man doch nett was eigenes reinhängen- allerdings
> werden bestimmt
> einige programmierer bereits (idiotischer weise) auf phpsessid zugegriffen
> haben (fest)... also besser so lassen...

Der Name ist unwichtig, bei ordentlicher Programmierung spielt der keine
Rolle, da du ja über
$_SESSION['...'] auf die Session-Daten zugreifst.
Benötigst du die session-id nimm
session_id()

>
> session.auto_start = 0
> -- wird mir wohl bei header("Location... auch nichts bringen...
Das hat nichts mit header() zu tun.
Damit ersparst du dir nur ein
session_start();
in jedem Skript.


Also ich kann dein Problem nicht nachvollziehen.

Ich benutze Cookie-lose Sessions ohne Probleme:

- use_trans_id ist eingeschaltet
- use_cookies per .htacces abgeschaltet
- in den relevanten Skripten ein session_start();
- zum setzen von Session-Variablen ein $_SESSION['foo'] = $bar;
- zum auslesen ein $bar = $_SESSION['foo'] (bzw. mit isset($_SESSION['foo'])
erstmal überprüfen).


Poste doch mal die session-relevanten Code-abschnitte, sonst wird das hier
nix.
Sag, was wann wie in der Session gespeichert werden soll und wie das wo wie
wann wieder ausgelesen werden soll.


Gruß
Thomas



php::bar PHP Wiki   -   Listenarchive