Initialisierung SessionManager

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Initialisierung SessionManager

Beitrag von dave » 22.02.2011, 23:19:00

Schönen guten Abend ;)


Ich habe am heutigen Tag noch eine weitere Frage:

Wie initialisiere ich den SessionManager richtig?

Genauer:

Ich habe einen Controller, der über ein Template aufgerufen wird. In diesem Controller initialisiere ich eine Session:

Code: Alles auswählen

$sessMgr = new SessionManager('UserData');


und speichere anschliessend den Benutzernamen (Nach erfolgreichem Login):

Code: Alles auswählen

$sessMgr->saveSessionData('user', $user);



Soweit, so gut ;)

In einem anderen Controller möchte ich nun auf diese Session-Daten zugreifen:

Dies mache ich so:

Code: Alles auswählen

$sessMgr = new SessionManager('UserData');

Code: Alles auswählen

echo $sessMgr->loadSessionData('user');


Jedoch: Es kommt nichts ... Was mache ich falsch? Oder habe ich die Initialisierung einfach falsch verstanden?

Achso: den Import des SessionManager führe ich in beiden Controllern durch, hab das also nicht vergessen:

Code: Alles auswählen

import('core::session','SessionManager');


Prost, :ugeek:
Dave

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von Screeze » 23.02.2011, 00:19:02

Eigentlich sollte das so klappen, sicher dass es in der richtigen Reihenfolge ausgeführt wird?

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von dave » 23.02.2011, 00:31:03

Ach Man, ein Bier zuviel und schon klappt es nicht mehr richtig ;).

Ich hab den Controller einfach völlig falsch benannt. Nachdem ich über einige echos nochmal alles Schritt für Schritt durch gegangen bin, hab ich den Fehler gefunden und mit dem SessionManager klappt alles wie im 1. Post beschrieben!


Ich muss einfach mal festhalten, dass der Support echt erstaklassig ist! Ich habe mir das schon von Anfang an gedacht und daher gleich mit dem APF angefangen. Vielen Dank dafür und weiter so. Wenn ich fit genug bin werde ich mein gesammeltes Wissen auch gerne teilen!


Na denn, Prost :ugeek:
Dave

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von Screeze » 23.02.2011, 09:30:51

kein problem, vor ca. Einem jahr hab ich genauso angefangen wie du jetzt ;)

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von dave » 23.02.2011, 13:37:48

Ich habe jetzt mal weiter gemacht und bin auch ein gutes Stück weiter vorran gekommen :)

Ich speichere sämtliche Benutzerdaten in der Session 'UserData'.

Das sieht dann so aus:

Code: Alles auswählen

[GenericDomainObject ObjectName="User", UserID="2", DisplayName="Mohrig, David", FirstName="David", LastName="Mohrig", StreetName="xxx", StreetNumber="xxx", ZIPCode="xxxxx", City="Berlin", EMail="xxx@xxx.com", Phone="NULL", Mobile="NULL", Username="der-dave", Password="md5hash", CreationTimestamp="2011-02-22 23:03:23", ModificationTimestamp="0000-00-00 00:00:00"]


Das habe ich einfach mal über ein echo so ausgegeben:

Code: Alles auswählen

$sessMgr = new SessionManager('UserData');
echo $sessMgr->loadSessionData('user');



Meine Frage:
Wie kann ich auf die UserID in der Session zugreifen?

Wenn ich folgendes versuche:

Code: Alles auswählen

$sessMgr->getProperty('UserID')


kommt eine Fehlermeldung, dass die Methode SessionManager::getProperty nicht existiert.

Code: Alles auswählen

Fatal error: Call to undefined method SessionManager::getProperty() in /is/htdocs/......./menu_benutzer_loggedin.php on line 16

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von Screeze » 23.02.2011, 16:41:13

Du speicherst dir ja quasi dein user-objekt (GenericDomainObject) in der session.
Also machst du folgendes:

Code: Alles auswählen


$sessMgr 
= new SessionManager('UserData');
$user $sessMgr->loadSessionData('user'); 


und jetzt kannst du wie gewohnt auf $user zugreifen:

Code: Alles auswählen

$user->getProperty('UserID'

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von dave » 23.02.2011, 16:49:46

Ok, cool, vielen Dank, aber wie kommt es, dass nun diese Methode getProperty('UserID') bekannt ist? Nur, weil ich das nochmal in eine neue Variable packe?

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von Screeze » 23.02.2011, 16:55:35

Nein, weil du es auf das gespeicherte objekt anwendest, und nicht auf den sessionmanager. auch folgendes wäre legitim:

Code: Alles auswählen


$sessMgr 
= new SessionManager('UserData');
echo $sessMgr->loadSessionData('user')->getProperty('UserID') ; 
 

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von dave » 23.02.2011, 18:31:38

Ok, verstehe. Für das Objekt an sich fühlt sich der SessionManager dann nicht mehr verantwortlich ;).

Nächste Frage:
Wie ist das mit der Gültigkeit der Session? Ich weiss von meinen Anwendungen, bei denen ich das SESSION-Handling manuell gemacht habe, dass die Session immer nur eine gewisse Zeit gültig ist. Das heisst, wird der Browser ohne Logout geschlossen und am nächsten Tag die Seite besucht, musste man sich neu anmelden. Dies scheint mir aber hier über den SessionManager nicht der Fall zu sein. Ich musste mich heute Morgen nicht erneut anmelden. Oder ist es einfach ein Fehler in meiner Logik?

Sollte die Session nicht unbegrenzt gültig sein, wollte ich mit COOKIES arbeiten, damit der User sich nicht ständig neu einloggen muss. Ist das notwendig bzw. wie werden COOKIES vom Framework unterstützt?

MfG
Dave

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von Screeze » 23.02.2011, 18:52:09

die gültigkeit einer session hängt von verschiedenen faktoren ab. Zum einen die einstellungen des servers (zeitbegrenzung kann in php.ini festgelegt werden) zum andern an den einstellungen des clients. In den meisten browsern kannst du angeben wie lange cookies gespeichert werden sollen, und ob sessions beim schließen gelöscht werden sollen oder nicht.
Ob es einen manager für cookies gibt bin ich grad nicht sicher, bin vom handy online. Musst du mal auf der apf dokuseite nachsehen.

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von dave » 23.02.2011, 19:06:42

Ok, danke, diese Bedingungen wusste ich noch gar nicht ;).

Ja, es gibt vom Framework her einen CookieManager, der dem SessionManager sehr ähnlich ist.

Werde mal die Servereinstellungen genauer checken ... Danke erstmal!

MfG
Dave

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von dave » 23.02.2011, 20:57:18

Nochmal ne Frage ;)


Mein Problem ist im Moment, dass ich über ein echo meiner Session

Code: Alles auswählen

$sessMgr = new SessionManager('UserData');
echo $sessMgr->loadSessionData('user');

immer 3 GenericDomainObject ausgegeben bekomme, alle mit exakt dem gleichen Inhalt.

Liegt das daran, dass ich unterschiedlichen Controllern die Session neu initialisiere?

Code: Alles auswählen

$sessMgr = new SessionManager('UserData');


Ich muss doch jedesmal zu Beginn mit einem

Code: Alles auswählen

new SessionManager('blubb');
die Session initielisieren, um darauf zugreifen zu können, oder? Aber warum habe ich dann 3 GenericDomainObjecte?

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von Screeze » 23.02.2011, 21:00:29

Nein ist schon korrekt so.
Aber du solltest nur 1 objekt bekommen, wenn du nur 1 darin gespeichert hast?

mach mal statt dem echo ein

Code: Alles auswählen


$sessMgr 
= new SessionManager('UserData');
$user$sessMgr->loadSessionData('user');
var_dump($user);
 


und poste die Ausgabe mal hier

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von dave » 23.02.2011, 22:21:49

Ok, hier kommt die Ausgabe:

Code: Alles auswählen

[GenericDomainObject ObjectName="User", UserID="2", DisplayName="Mohrig, David", FirstName="David", LastName="Mohrig", StreetName="Roedernallee", StreetNumber="168", ZIPCode="13407", City="Berlin", EMail="david.mohrig@gmail.com", Phone="NULL", Mobile="NULL", Username="der-dave", Password="bfc6d54adad13c3dfced8412cdab1cdc", CreationTimestamp="2011-02-22 23:03:23", ModificationTimestamp="0000-00-00 00:00:00"][GenericDomainObject ObjectName="User", UserID="2", DisplayName="Mohrig, David", FirstName="David", LastName="Mohrig", StreetName="Roedernallee", StreetNumber="168", ZIPCode="13407", City="Berlin", EMail="david.mohrig@gmail.com", Phone="NULL", Mobile="NULL", Username="der-dave", Password="bfc6d54adad13c3dfced8412cdab1cdc", CreationTimestamp="2011-02-22 23:03:23", ModificationTimestamp="0000-00-00 00:00:00"]object(GenericDomainObject)#118 (11) { ["dataComponent:private"]=> NULL ["objectName:private"]=> string(4) "User" ["properties:private"]=> array(15) { ["UserID"]=> string(1) "2" ["DisplayName"]=> string(13) "Mohrig, David" ["FirstName"]=> string(5) "David" ["LastName"]=> string(6) "Mohrig" ["StreetName"]=> string(12) "Roedernallee" ["StreetNumber"]=> string(3) "168" ["ZIPCode"]=> string(5) "13407" ["City"]=> string(6) "Berlin" ["EMail"]=> string(22) "david.mohrig@gmail.com" ["Phone"]=> string(0) "" ["Mobile"]=> string(0) "" ["Username"]=> string(8) "der-dave" ["Password"]=> string(32) "bfc6d54adad13c3dfced8412cdab1cdc" ["CreationTimestamp"]=> string(19) "2011-02-22 23:03:23" ["ModificationTimestamp"]=> string(19) "0000-00-00 00:00:00" } ["relatedObjects:private"]=> array(0) { } ["__ObjectID:protected"]=> NULL ["__ParentObject:protected"]=> NULL ["__Children:protected"]=> array(0) { } ["__Attributes:protected"]=> array(0) { } ["__Context:protected"]=> NULL ["__Language:protected"]=> string(2) "de" ["__ServiceType:protected"]=> NULL } 



Was kannst du damit bitte anfangen? ;) Wusste leider nicht, wie ich es anständig formatieren soll ...

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Initialisierung SessionManager

Beitrag von Screeze » 23.02.2011, 22:38:31

Code: Alles auswählen

[GenericDomainObject ObjectName="User", UserID="2", DisplayName="Mohrig, David", FirstName="David", LastName="Mohrig", StreetName="Roedernallee", StreetNumber="168", ZIPCode="13407", City="Berlin", EMail="david.mohrig@gmail.com", Phone="NULL", Mobile="NULL", Username="der-dave", Password="bfc6d54adad13c3dfced8412cdab1cdc", CreationTimestamp="2011-02-22 23:03:23", ModificationTimestamp="0000-00-00 00:00:00"]


Code: Alles auswählen

[GenericDomainObject ObjectName="User", UserID="2", DisplayName="Mohrig, David", FirstName="David", LastName="Mohrig", StreetName="Roedernallee", StreetNumber="168", ZIPCode="13407", City="Berlin", EMail="david.mohrig@gmail.com", Phone="NULL", Mobile="NULL", Username="der-dave", Password="bfc6d54adad13c3dfced8412cdab1cdc", CreationTimestamp="2011-02-22 23:03:23", ModificationTimestamp="0000-00-00 00:00:00"]



Code: Alles auswählen

object(GenericDomainObject)#118 (11) { ["dataComponent:private"]=> NULL ["objectName:private"]=> string(4) "User" ["properties:private"]=> array(15) { ["UserID"]=> string(1) "2" ["DisplayName"]=> string(13) "Mohrig, David" ["FirstName"]=> string(5) "David" ["LastName"]=> string(6) "Mohrig" ["StreetName"]=> string(12) "Roedernallee" ["StreetNumber"]=> string(3) "168" ["ZIPCode"]=> string(5) "13407" ["City"]=> string(6) "Berlin" ["EMail"]=> string(22) "david.mohrig@gmail.com" ["Phone"]=> string(0) "" ["Mobile"]=> string(0) "" ["Username"]=> string(8) "der-dave" ["Password"]=> string(32) "bfc6d54adad13c3dfced8412cdab1cdc" ["CreationTimestamp"]=> string(19) "2011-02-22 23:03:23" ["ModificationTimestamp"]=> string(19) "0000-00-00 00:00:00" } ["relatedObjects:private"]=> array(0) { } ["__ObjectID:protected"]=> NULL ["__ParentObject:protected"]=> NULL ["__Children:protected"]=> array(0) { } ["__Attributes:protected"]=> array(0) { } ["__Context:protected"]=> NULL ["__Language:protected"]=> string(2) "de" ["__ServiceType:protected"]=> NULL } 


nummer 1 und 2 sind definitiv ausgaben eines echo's, das 3. kommt vom var_dump. du hast also noch 2 echos in deinem code irgendwo ...

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast