Seite 1 von 1

Variablen werden nicht in Session gespeichert

Verfasst: So 28. Jun 2009, 18:49
von BagHira
Hallo zusammen,

ich wende mich heute mit einem Problem an euch, an dem ich die ganze Woche schon dran bin, aber anscheinend zu blöd dafür bin, es zu lösen :oops:

Ich hab einen "Mini-Blog" für meine Frau umgesetzt (http://www.handgewickelte-glasperlen.de/blog/index.html). Hierbei handelt es sich eigentlich nur um eine Artikelliste (dank an HerrnB) und eine Kommentarfunktion.
Mir geht es jetzt darum Doppelpostings zu vermeiden. Zur Zeit hab ich das wie im Gästebuch von Dodger77 realisiert, hier wird der User x Minuten für die Abgabe eines Kommentares (egal jetzt für welchen) gesperrt.

Was ich nun realisieren möchte ist folgendes:
Wenn ein User den Artikel mit der ID 4711 kommentiert hat, soll die Kommentarfunktion für diesen User für x Minuten gesperrt werden. Alle anderen Artikel Artikel soll er aber kommentieren können. Umsetzten möchte ich dies gerne über $_Session bzw. über das Sessionmanagement von Contenido ($sess).

Ich habe folgendes versucht:

Beim Absenden des Formulars für den Kommentareintrag mach das:

Code: Alles auswählen

if (($_POST['idart']+0)>1)
{
   $my_time=time()+$dauer*60;
   $_SESSION[$_POST['idart']]["blog_idart"] = $_POST['idart'];
   $_SESSION[$_POST['idart']]["blog_time2go"]= $my_time;
   ...
   echo '<pre>Session gespeicht'.print_r( $_SESSION[$_POST['idart']], true).'</pre>';
}
print_r() liefert mir:

Code: Alles auswählen

Session gespeichtArray
(
    [264] => Array
        (
            [blog_idart] => 264
            [blog_time2go] => 1246209038
        )

)
Soweit Okay :-)
Gehe ich aber jetzt auf die Übersichtsseite des Blog (oder sonst wo hin...), also ich verlassen das Formular, ist die $_Session weg. Also dachte ich, die Session wird auf anderen Seiten nicht gestartet und er verliert die Variablen.

Folgendes hab ich dann weiter versucht:
Ich habe das @session_start();, welches ich in dem Modul-Output drin hatte auskommentiert und in die "config.local.php" eingesetzt. Hiermit sollte mir die $Sessin ja in jeder Seite zur Verfügung stehen, aber Pustekuchen.
Resultat: Das gleiche wie oben, die Variablen waren weg :-(

Okay, dachte ich und versuchte mich an dem Sessionmanagement von Contenido...
1. Ich habe es nicht hinbekommen, ein Array (wie z.B. oben) in die $sess zu speichern.
2. Ich konnte nur eine Variable speichern die so ausschaut $artId.time() also z.B. 4711.1246209038. Leider hab ich keine Ahnung, wie ich jetzt Auswerten soll, ob der User den Artikel 4711 schon kommentiert hat oder nicht.

Jetzt die Frage an euch, wie kann ich dies Umsetzten, am liebsten mit $Session, falls das aber nicht gehen sollte auch mit $sess. Was ich nicht möchte, ist das Problem über Cookies lösen.

Ich hoffe ihr könnt mir helfen, bzw. in die richtige Richtung schubsen.

Re: Variablen werden nicht in Session gespeichert

Verfasst: So 28. Jun 2009, 19:38
von idea-tec
vielleicht hilft die dir dieser link. http://www.contenido-wiki.org/wiki/inde ... le=Session
oder das wiki insgesamt weiter

Re: Variablen werden nicht in Session gespeichert

Verfasst: So 28. Jun 2009, 19:52
von xmurrix
Hallo BagHira,

wenn Werte in $_SESSION auf der nächsten Seite nicht zur Verfügung stehen, wird die Session, warum auch immer, nicht gespeichert. Per Default werden Session-Daten im Filesystem abgelegt, also braucht PHP ein Verzeichnis und Schreibrechte darin...

Mit dem Contenido Sessionmanagement sollte es folgemdermaßen funktionieren:

Code: Alles auswählen

if (($_POST['idart']+0)>1)
{
   $my_time=time()+$dauer*60;
   global $blogComments;
   $sess->register('blogComments');
   if (!is_array($blogComments)) {
      $blogComments = array();
   }
   $blogComments[$_POST['idart']]["blog_idart"] = $_POST['idart'];
   $blogComments[$_POST['idart']]["blog_time2go"]= $my_time;
   ...
   echo '<pre>Session gespeicht'.print_r($blogComments[$_POST['idart']], true).'</pre>';
}
Auswerten kannst es mit:

Code: Alles auswählen

global $blogComments;
$idart = 123;
if ($sess->is_registered('blogComments') && is_array($blogComments) && isset($blogComments[$idart])) {
    echo 'artikel kommentar timer: ' . $blogComments[$idart]['blog_time2go'];
}

Der Link von idea-tec ist natürlich auch sehr hilfreich ;-)


Gruß
xmurrix

Re: Variablen werden nicht in Session gespeichert

Verfasst: Mo 29. Jun 2009, 09:14
von Oldperl
xmurrix hat geschrieben:Per Default werden Session-Daten im Filesystem abgelegt,...
Dies stimmt für Contenido so nicht. Contenido, respektive die eingesetzte PHPLib, speichert Sessions per Default in der DB (con_phplib_active_sessions), siehe auch am Ende des Wiki-Eintrages. Dieses, wie im Wiki beschrieben, auf das Filesystem umzustellen kann, abhängig von der Serverkonstellation, Verbesserungen der Performance bringen.

Gruß aus Franken

Ortwin

Re: Variablen werden nicht in Session gespeichert

Verfasst: Mo 29. Jun 2009, 09:50
von xmurrix
Oldperl hat geschrieben:
xmurrix hat geschrieben:Per Default werden Session-Daten im Filesystem abgelegt,...
Dies stimmt für Contenido so nicht. Contenido, respektive die eingesetzte PHPLib, speichert Sessions per Default in der DB (con_phplib_active_sessions), siehe auch am Ende des Wiki-Eintrages. Dieses, wie im Wiki beschrieben, auf das Filesystem umzustellen kann, abhängig von der Serverkonstellation, Verbesserungen der Performance bringen...
Ok, habe mich nicht verständlich ausgedrückt, das kann dann missverstanden werden.

$_SESSION wird in PHP per default im Filesystem abgelegt (siehe php.ini session.save_handler). Die Session in Contenido ist anders, hat mit $_SESSION nichts zu tun und wird über die Sessionverwaltung von PHPlib gesteuert.

Gruß
xmurrix

Re: Variablen werden nicht in Session gespeichert

Verfasst: Mo 29. Jun 2009, 12:25
von BagHira
Baoh, wie geil ist das den :lol: :lol: :lol:
Es geht, funktioniert perfekt - da sieht man dann doch ganz deutlich den unterschied zwischen einem Freizeittipsler und den Hardcoreprogrammieren.
Ich bin da ne Woche dran gesessen und hab’s nicht zusammen gebracht :oops:


Vielen, vielen herzlichen Dank. :!: :P :!: