Page 1 of 1

Session-Handler Schwierigkeiten

Posted: 2004-08-31 23:19
by jürgen2372
Hi

Ich hab seid geraumer Zeit auf ServerA meinen eigenen SessionHandler (my_query ist ne eigene Funktion, die einfach das query ausführt, DB-Connect existiert zum jeweiligen Zeitpunkt):

Code: Select all

function open($save_path,$session_name)         {
	return(true);
}

function close()                                {
	return(true); }

function read($id)                              {
	$result=my_query("select DataValue from sessions where sessionid = '$id'");
	if (count($result[0])>0)
		return ($result["DataValue"]);
	return("");
}

function write($id,$sess_xxdata) {
	global $URL;

	$query = "insert into sessions set sessionID = '$id',  LastUpdated = NOW(), DataValue = '$sess_xxdata' ";
	my_query($query);
	return(error_log("sess_write('".$id."','".$sess_xxdata."')",0));
}

function destroy($id)                           {
	my_query("DELETE FROM sessions WHERE sessionID = '$id'");
	return(error_log("sess_destroy('".$id."')",0)); }

function gc($maxlifetime)                       {
	return(error_log("sess_gc('".$maxlifetime."')",0)); }

session_set_save_handler ("open", "close", "read", "write", "destroy","gc");
Das lief bisher auf ServerA ohne Probleme. Ich hab dieses Skript auch erfolgreich auf ServerB installiert und dort lief es auch ohne Probleme. Doch seit heute spinnt das Teil.

Ich versuche mich auf einer (momentan nicht öffentlichen) Seite einzuloggen. Beim einloggen werden die Userdaten geprüft, bei Erfolg die Session gestartet und $_SESSION mit Inhalten gefüllt. Nun sollt ja das write aufgerufen werden (was ja wie gesagt bis heute wunderbar geklappt hatte)
Das write wird aber NICHT aufgerufen (seh ich hier ja am error_log). Ich bin durch probieren drauf gestossen, dass wenn ich in die read nur ein return(""); mache, dass das write auf einmal aufgerufen wird. Sobald ich das SELECT wieder reinnehme, damit die Daten wieder aus der DB geladen werden, funktioniert das write nicht mehr.

Bin kurz vorm verzweifeln bzw. bins eigentlich schon :twisted:

Weiss jemand rat?

Achja, ServerB wurde aufgrund dessen komplett neu installiert (ist ein Strato High End), doch ohne Ã?nderung.

Apache ist 2.0.48 mit php 4.3.3

Thx for Help

Re: Session-Handler Schwierigkeiten

Posted: 2004-08-31 23:49
by jürgen2372
Habe hier mal ein Beispiel (sessionHandler steht ja oben):

Code: Select all

if($_REQUEST["SID"]!="") {
	session_id($_REQUEST["SID"]);
	session_start();
	echo "ReStart";
}else
{
	session_start();
	$_SESSION["test"] = "adfsfsd";
	echo "Start";
}

print_r($_SESSION);
Wenn keine SID übergeben, dann eine neue anlegen -> speichern. Dabei entsteht folg. Logeintrag:
sess_read('08d42e39a128163926c5ff4d5a84b244': Nothing found)
sess_write('08d42e39a128163926c5ff4d5a84b244','') <-- 2tes Argument keine Daten !?
sess_close()
DB-Eintrag existiert, aber natürlich ohne SessionData :(

Re: Session-Handler Schwierigkeiten

Posted: 2004-09-01 01:01
by jürgen2372
Und nach noch längerem hin- und der wieder eine Weisheit mehr:

session_decode($result["DataValue"]); gibt mir kein gültiges $_SESSION-Array :(

Wenn ich aber $result["DataValue"] ausgebe, diesen String dann einsetze, dann klappts es:
session_decode('login|s:6:"Jürgen"'); gibt mir dann $_SESSION["login"] ="Jürgen"

liegt das daran oder sind das zwei unabhängige Probleme?

Re: Session-Handler Schwierigkeiten

Posted: 2004-09-01 08:44
by dimaki
Hast Du mal versucht den Rückgabewert
return ($result["DataValue"]);
explizit nach string zu casten? :?:

Nur ne Idee, aber kannst ja mal andere Funktionsnamen probieren. Hatte auch schon das Problem, dass PHP manche Bezeichner als interne Funktion versteht.
Also besser my_open, my_close,... oder so. :idea:

BTW: Dein Programmierstil ist nicht gerade gut. Würde mich da mal etwas mehr an die Pear Coding Standards halten, um Probleme zu vermeiden.
http://pear.php.net/manual/en/standards.php
Das lohnt sich! :wink:
Besonders alle

Code: Select all

$result["DataValue"] 
würde ich durch

Code: Select all

$result['DataValue']
ersetzen!

dimaki

Re: Session-Handler Schwierigkeiten

Posted: 2004-09-01 12:18
by jürgen2372
Casting hab ich auch schon probiert. sogar strval um den Rückgabewert gesetzt und auch mit ' hab ichs probiert.

Auch die Funktionsnamen hab ich geändert, was ich mir aber vorher schon dachte, dass es das nicht sein kann. Schliesslich läuft es auf anderen Server ja.

Ich glaub, dass die Session-Encode-Funktion nicht mehr korrekt klappt. Ich hab die explizit selbst mal aufgerufen (direkt nach session-start und setzen von $_SESSION) und bekomme einfach keinen string zurück.

Re: Session-Handler Schwierigkeiten

Posted: 2004-09-02 08:48
by dimaki
AFAIK brauchst Du doch die session_encode und session_decode Functions garnicht, wenn Du eigene Session-Handler hast.

Re: Session-Handler Schwierigkeiten

Posted: 2004-09-03 16:47
by jürgen2372
Ja, ich nutze ich ja auch nicht. Doch wollte mal versuchen, einen Workaorund zu bauen und hab dabei gemerkt, dass mir diese Funktionen auch nicht weiterhelfen bzw. nix so zurückgeben, wie ich das dachte.