Hallo Leute,
ich schreibe gerade an einer kleinen oxid API für eine iPhone-App. Darin soll sich natürlich der Nutzer einloggen können. Nun wollte ich dafür die Klasse oxSession nehmen und habe schon erfreut gesehen, dass es einene Remote Access Token gibt. Die Generierung läuft auch, nur leider habe ich keinerlei Ahnung, wenn die App dann an den Server diesen Token zusammen mit der Session-ID schickt, ich daraus wieder ein oxSession-Objekt mache, eine load() Funktion wie bei den vielen anderen Klassen habe ich leider nicht gefunden
Du kannst die Session einfach benutzen, so wie sonst auch.
Naja, aber wie lade ich denn dann die Session, die ich beim letzten Mal für den Nutzer ge-freezed habe wieder, so dass sie wieder läuft? Ich will halt nur ein mal einen login-call machen, der dann den Access Token und die Session-ID zurück gibt und dann so lange, bis die Session mal abläuft nur noch mit diesen beiden arbeiten… Wisst ihr was ich meine?
Also das generierte Token wird an den Client geschickt und der sendet es im Parameter ‘rtoken’ per GET oder POST zurück.
Das braucht man aber nur wenn der User-Agent wechselt (z.B. wenn du mit einer Flash-Anwendung die Session des Browsers benutzen willst), mit dem Parameter wird die User-Agent Prüfung umgangen. Ansonsten reicht die Session-ID.
Also reicht es aus, die Rückgabewerte in die entsprechenden Felder zu tun und das System “kramt” sich die dann automatisch raus, ja?
Und um dann an den dazugehörigen oxUser zu kommen muss ich mir dessen ID noch separat merken, oder?
So wie im Browser, die sid wird bei jedem Aufruf an den Client gesendet und wird von diesem zurückgeschickt, mit dem Parameter sid oder force_sid, bin allerdings grade überfragt was genau force_sid macht.
Den aktuell angemeldeten Benutzer bekommst du überall mit $this->getUser() (weil alle Klassen von OxSuperCfg abgeleitet sind).
Okay, reicht mir dann eventuell der Access Token aus, um die Session valide zu machen? Die will mir nämlich weder mit $session->getId() noch mit $session->sid() ihre ID verraten und in $_SESSION steht die auch nicht drin sondern nur der Token
Die Sid brauchst du in jedem Fall.
$this->getSession()->getId()
funktioniert, wenn da nichts drinsteht hast du wahrscheinlich noch keine Session, die wird erst gestartet wenn sie benötigt wird.
Ah, okay, an dem forcen lag es. Einfach dann die SID in $_POST[‘sid’] rein, ja?
EDIT: Und wie kriege ich dann mit, ob die Session erfolgreich geladen wurde?!
Indem du irgendwas damit machst, z.B. du legst was in den Warenkorb, wenn’s beim nächsten Aufruf noch drin ist funktioniert die Session.
Ne, also ich will dann immer checken, ob es eine valide Session gibt, wenn mir der Nutzer der API seinen Token gibt
Ne valide Session hast du sozusagen immer, auch ne neue Session ist valide. Ist halt evtl. nicht mehr die gleiche wie vorher. Das muss man normalerweise nicht prüfen, weil dann einfach die Inhalte erscheinen als ob der User die Seite ohne sid aufgerufen hat. Also z.B: Login, User ist eingeloggt, Session abgelaufen, User ist ausgeloggt.
und genau das wüsste ich gerne, ob der user eingeloggt ist oder nicht. hab dazu leider keine funktion gefunden…
if ( $oUser = $this->getUser() ) {
//user ist eingeloggt
}