Sessions in Contenido Backend

Gesperrt
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Sessions in Contenido Backend

Beitrag von emergence »

ich hab da ein kleines problem und ein paar fragen...

welche phplib version ist in contenido includiert ?

im bezugname auf ein beispiel zB
contenido/includes/include.con_str_overview.php

Code: Alles auswählen

if (!is_bool($remakeStrTable))
{
	$remakeStrTable = false;
}

if (!is_bool($remakeCatTable))
{
	$remakeCatTable = false;
}

$sess->register("remakeStrTable");
$sess->register("remakeCatTable");
ich find nirgends wo das gespeichert wird...

die variablen $CatTableClient,$CatTableLang,$serializedRootCatItem
werden gespeichert, die anderen beiden nicht...
was hab ich übersehen ?
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

wie, wo das gespeichert wird?

alle Variablen, die mit $sess->register registriert sind, werden beim page_close gespeichert (in der session als base64).

welche phplib das ist, weiß ich leider nicht genau, aber die version ist kurz vor der aktuellen (die aktuelle hat zwar einige Bugfixes, die wir aber nicht brauchen).
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

okay...
der witz an der ganzen geschichte ist folgender...

sagen wir mal ich hab folgenden code

Code: Alles auswählen

$sess->register("test");
var_dump ($test);
print_r($test);
$test = false;
erhalte ich als ergebnis: string(0) ""
bei $test = true;
erhalte ich als ergebnis: string(1) "1" 1

ähm ??
eine abfrage mittels is_bool liefert einfach immer falsch weils bei mir immer ein string bleibt... oder hab ich was übersehen...
bei ergibt das mit is_bool keinen sinn :-)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

soweit ich weiß, wird das immer als string abgelegt -> du müßtest also vorher erstmal explizit casten (wobei, soweit ich weiß, auch strings als bool gecastet werden, z.b. ein string mit "0" ist false und "1" ist true (oder andersrum?). deshalb auch teilweise die 3 ===, damit auch der typ getestet wird).
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ich hab mich jetzt mal damit beholfen

Code: Alles auswählen

if (is_string($test))
{
 $test = unserialize($test);
}
$sess->register("test");
var_dump ($test);
$test = false;
$test = serialize($test);
damit bleibt der typ immer korrekt erhalten... vom code im backend finde ich es zwar noch immer unlogisch, aber was solls...

warum das anscheinend im snapshot funktionieren soll ?? keine ahnung...
in sessions.inc gibts zwar ne eigene serialize funktion, aber ob die das korrekt behandelt ??
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

timo hat geschrieben:soweit ich weiß, wird das immer als string abgelegt -> du müßtest also vorher erstmal explizit casten (wobei, soweit ich weiß, auch strings als bool gecastet werden, z.b. ein string mit "0" ist false und "1" ist true (oder andersrum?). deshalb auch teilweise die 3 ===, damit auch der typ getestet wird).
okay mit string ablegen das stimmt, wird so weit ich es bis jetzt kapiert habe auch so gemacht... aber die abfrage mit is_bool ist trotzdem schwachsinn... da bei false der string leer ist und nicht 0
mit serialize und unserialize bekomme ich genau das was ich will...
irgendwie hat bei mir der verzeichnisbaum bei artikel und in kategorie sich nicht mehr gegenseitig abgeglichen...
jetzt funktionierts wieder ohne mucken... ;-)
im cvs scheints aufgrund der neuen con_sync zu funktionieren, aber da ich das nicht übernommen habe ist es egal...

der für mich funktionierende code sieht jetzt so aus:

Code: Alles auswählen

$sess->register("remakeStrTable");
$sess->register("remakeCatTable");
$sess->register("CatTableClient");
$sess->register("CatTableLang");

if (!isset($remakeStrTable))
{
	$remakeStrTable = false;
} else {
	$remakeStrTable = unserialize($remakeStrTable);
}

if (!isset($remakeCatTable))
{
	$remakeCatTable = false;
} else {
	$remakeCatTable = unserialize($remakeCatTable);
}

if ($CatTableClient != $client)
{
	$remakeCatTable = true;
}

if ($CatTableLang != $lang)
{
	$remakeCatTable = true;
}
und nach

Code: Alles auswählen

$serializedRootCatItem = serialize($rootCatItem);
ergänzen:

Code: Alles auswählen

$remakeStrTable = serialize($remakeStrTable);

$remakeCatTable = serialize($remakeCatTable);
die anpassungen in include.str_overview.php sind so ähnlich ausgefallen...

ach ja, die variable mit dem verzeichnis baum in user_property zu speichern ist wirklich ein nettes feature... ;-)

tja ne frage hab ich noch...
hast du ne ahnung wie gross ein wert sein darf, der in einer session var gespeichert werden kann ?
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

emergence hat geschrieben: tja ne frage hab ich noch...
hast du ne ahnung wie gross ein wert sein darf, der in einer session var gespeichert werden kann ?
Ich würde die Werte in der Session so gering wie möglich halten - theoretisch bis zur Feldgröße minus das base64-encoding, aber praktisch hat's durch die PHP-Bugs nicht geklappt :(
Gesperrt