Sessionhandling

hi,

ich habe folgendes problem mit der übermittlung eines sessionwertes.

auf einer mehrsprachigen website ermittele ich über eine sessionvariable die sprachversion
die angezeigt werden soll.
ich verwende die php-klasse class.rFastTemplate.php.
über die klasse und die sessionvariable ermittele ich welches template gerade geholt werden muß.
bsp. wird in der sprachauswahl für die sessionvariable $language der wert 1 gesetzt werden alle
template-dateien aus dem template-verzeichnis 1 geholt.
funktioniert soweit auch ohne probleme.

jetzt wird die ganze sache interessant. rufe ich über javascript popup-fenster für eine
hilfseite auf wo ich die sessionvariable übermittele (damit ich die sprachversion weiss)
ist die reaktion der einzelnen browser und betriebssysteme völlig unterschiedlich und eigentlich
nicht so richtig nachvollziehbar.
mal ein beispiel.
ein user mit betriebsystem window 2000 und ie 6.0 ruft die seite auf und bekommt alles
angezeigt, anderseits ein user mit betriebssytem win98 und ie 6.0 ruft die seite auf und die session
ist weg.

und so ist die reaktion verschiedener browser (netscape, ie, mozilla, opera) auf den jeweiligen
läufigen betriebssystemen (windowversionen, linuxversionen) völlig verschieden.
ich konnte bisher auch noch kein muster erkennen. dass einzigste was ich rausbekommen habe ist,
das es wohl unter macintosh nicht auftritt.

kannst du mir diesbezüglich weiterhelfen.
bin für jeden hinweis dankbar.

cu
harald

Hallo Harald !

hi,

ich habe folgendes problem mit der übermittlung eines
sessionwertes.

jetzt wird die ganze sache interessant. rufe ich über
javascript popup-fenster für eine
hilfseite auf wo ich die sessionvariable übermittele (damit
ich die sprachversion weiss)
ist die reaktion der einzelnen browser und betriebssysteme
völlig unterschiedlich und eigentlich
nicht so richtig nachvollziehbar.
mal ein beispiel.
ein user mit betriebsystem window 2000 und ie 6.0 ruft die
seite auf und bekommt alles
angezeigt, anderseits ein user mit betriebssytem win98 und ie
6.0 ruft die seite auf und die session
ist weg.

Die SessionID wird entweder per Cookie, oder per URL übergeben. Ich denke einmal, in den Fällen, wo es nicht funktioniert, sind Cookies aus und die Übergabe per URL klappt (grundsätzlich) nicht.
Hast du so etwas in deinem JavaScript:

window.open("datei.php?<?php echo session_name()?>=<?php echo session_id() ?>","name","...");

?

Alexander

jetzt wird die ganze sache interessant. rufe ich über
javascript popup-fenster für eine
hilfseite auf wo ich die sessionvariable übermittele (damit
ich die sprachversion weiss)
ist die reaktion der einzelnen browser und betriebssysteme
völlig unterschiedlich und eigentlich
nicht so richtig nachvollziehbar.
mal ein beispiel.
ein user mit betriebsystem window 2000 und ie 6.0 ruft die
seite auf und bekommt alles
angezeigt, anderseits ein user mit betriebssytem win98 und ie
6.0 ruft die seite auf und die session
ist weg.

Hallo,

also ich weiss nicht ob es Dir weiterhilft, aber Du musst die Session immer am Anfang der Sources eröffnen, also ohne Leerzeilen oder ähnliches, sonst kommt es zu ungewöhnlichen Erscheinungen, die durchaus mit den Deinen vergleichbar sind.
Ausserdem würde ich auch die Variante benutzen, die in der ersten Antwort angegeben wird. Da viele User Cookies und ähnliches ausgeschalten habe würde ich die SessionID definitiv per expliziten GET-Variable in der URL mitgeben!

Hoffe, ich konnte weiterhelfen.

Gruß, Holger

hi,

bei jedem seitenaufruf wird immer zuerst das sessionhandling ausgeführt.

hier der code

/*
hier steht ein kommentar
*/
require("…/function/sessions.php");
initSession();
if ($HTTP_GET_VARS[‚language‘]) {
setSessionValue( ‚language‘, $HTTP_GET_VARS[‚language‘] );
}
$language = getSessionValue(‚language‘);
if (!$language) {
//var_dump($language);die;
header (‚Location: …/index.php?errorLanguage=1‘);
exit ();
}

… restlicher programmcode …

vielleicht kannst damit etwas anfangen.

cu
harald

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hi alexander,

ich übergebe keine session_id, sondern setzte in die session eine variable $language die einen bestimmten wert hat und diese variable wird bei jedem seitenaufruf geprüft und wenn sie nicht da ist, wird der nutzer auf die eingangsseite umgeleitet.
normalerweise bleibt beim öffnen von popup-fenstern die session bestehen, nur bei manchen browsern unter bestimmten betriebssystemen(z.b. ie unter win 98) ist sie auf einmal weg.
beim selben ie unter win 2000 bleibt die session bestehen.
und so passiert, wenn ein nutzer mit einem ie unter win 98 ein popup öffnet und wieder schließt und dann eine aktion mit get oder post macht, fliegt er auf die eingangsseite, während ein nutzer mit einem ie unter win 2000 normal weitergehen kann.

cu
harald

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo !

/*
hier steht ein kommentar
*/
require("…/function/sessions.php");

…die Datei ist die Interessante, was steht da drin, wie sind die Sessions realisiert ?

(aus dem anderen Post):

ich übergebe keine session_id, sondern setzte in die session eine :variable $language die einen bestimmten wert hat und diese variable :wird bei jedem seitenaufruf geprüft und wenn sie nicht da ist, wird :der nutzer auf die eingangsseite umgeleitet.

Wenn in der function/sessions.php die Session-Funktionen von PHP genutzt werden, macht diese Übergabe der Session-ID PHP automatisch. Falls Cookies erlaubt sind, per Cookie, ansonsten per GET-Parameter (–enable-trans-sessionid). Der GET-Parameter wird nun leider aber bei JavaScript nicht automatisch angehängt, daher meine Vermutung, das die Zeile wie im anderen Post zum öffnen des Fensters verwendet werden muss.

Alexander

[Tip Session am Anfang zu öffnen]

hi,

bei jedem seitenaufruf wird immer zuerst das sessionhandling
ausgeführt.

hier der code

/*
hier steht ein kommentar
*/
require("…/function/sessions.php");
initSession();

Also nicht am Anfang des Sources :wink:
Bau Dir das doch mal so um:

 session\_start();
/\*
 hier steht ein kommentar
\*/
require("../function/session.php");
...

Wäre auf jeden Fall sicherer - wobei das eine Schwachstelle verschiedener Server und nicht verschiedener Browser ist.

Wenn Du es nicht explizit angibst wird, wie schon jemand anderes hier erwähnt hat, erfolgt das folgende:

Es wird versucht die Daten in Cookies vorzuhalten (viele Probleme!!!)
Wenn keine Cookies da sind - per GET Parameter. (fehleranfällig)

Ich würde es entweder so machen, das Du einfach die Session ID per Get mit übergibst. Was aber eleganter, jedoch etwas mit Mehrarbeit verbunden ist, ist die Übergabe per POST Variable.

PHP fragt übrigens alles ab: Cookies, GET und POST Variablen. Es sollte also theoretisch langen, nachdem Du session_start() ausgeführt hast, direkt auf die Session Variable zuzugreifen!

Gruß aus Berlin
Holger

hi,

habe jetzt das gesamte js-handling mit den popups rausgeworfen, da immer, wenn ein popup-fenster geschlossen wurde, auch die session verlorengegangen ist.
ohne popups funktioniert alles.

ich danke allen für ihre unterstützung.

cu
harald