Yii Framework Forum: Speichern der Sprache (session-variable) über Logout hinweg - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Speichern der Sprache (session-variable) über Logout hinweg Rate Topic: -----

#1 User is offline   g3ck0 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 99
  • Joined: 03-June 09

Posted 11 June 2009 - 06:46 PM

hallo zusammen,

und zwar habe ich wieder mal ein problem ;) ich habe mit hilfe des folgenden threads eine sprachauswahl auf meiner website.
http://www.yiiframew...oc/cookbook/26/

nun ist es aber so, dass diese daten in der aktuellen session und in der language-variablen der yii-application gespeichert wird. wie kann ich diese einstellungen über den logout hinweg behalten?

ich habe es mal versuch, indem ich beim SiteController die actionLogout-methode modifiziert habe, aber kein erfolg. ebenso hat es mir auch nicht gebracht, den logout-link mit der sprache zu versehen.

mfg
armin
0

#2 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,017
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 12 June 2009 - 01:29 AM

Das dürfte daran liegen, dass Yii sämtliche Session-Infos löscht, wenn logout() aufgerufen wird. Qiang argumentiert, dies sei aus Sicherheitsgründen nötig (z.B. wenn Benutzer in i-Cafes sich anmelden...). Du kannst also nur die Daten, die du erhalten möchtest, vor dem logout() speichern und gleich hinterher wieder in der Session ablegen.
0

#3 User is offline   g3ck0 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 99
  • Joined: 03-June 09

Posted 12 June 2009 - 03:19 AM

ich habe mal den code hier in der SiteController.php
[code=controllers/SiteController.php]<?php
/**
* Logout the current user and redirect to homepage.
*/
public function actionLogout()
{
// Sichern der Spracheinstellung
$tempLanguage = Yii::app()->session['_language'];
Yii::app()->user->logout();
// Wiederherstellen der Spracheinstellung
Yii::app()->session['_language'] = $tempLanguage;
Yii::app()->language = $tempLanguage;
$this->redirect(Yii::app()->homeUrl);
}

?>[/code]
ich weiß, dass das sicherheitsrelevant ist, dass alles gelöscht wird, aber irgendwie muss ich das doch retten können?! oO

ich könnte sicherlich auf die passende URL weiterleiten, als ein &language=XXX hinzufügen, aber was ist, wenn ich mehrere daten speichern will? mir sind allgemein lösungen lieber, als spezielle.
0

#4 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,017
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 12 June 2009 - 03:21 AM

Deine Lösung sieht doch o.k. aus. Klappt es denn so?
0

#5 User is offline   g3ck0 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 99
  • Joined: 03-June 09

Posted 12 June 2009 - 03:28 AM

oh... ich hatte vergessen zu sagen, dass das eben nicht klappt *grml*

[edit]
ich glaube, dass nach dem logout keine neue session gestartet wird, sondern erst nachdem erneuten aufrufen einer seite...
[/edit]
0

#6 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,017
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 12 June 2009 - 03:36 AM

Müsste man mal erforschen, was genau mit der Session passiert. Aber am einfachsten ist es wohl tatsächlich mit dem Anhängen als URL-Parameter.

Eine allgemeinere Lösung kannst du erzielen, indem du dir deinen eigenen WebUser bastelst und dort logout() überschreibst, so dass nur noch die gewünschten Daten gelöscht werden.

Evtl. akzeptiert Qiang aber auch meinen Vorschlag, bei Aufruf mit logout(false) nicht die ganzen Daten zu löschen sondern nur die für die Authentifizierung benötigten. Mal abwarten ;)
0

#7 User is offline   g3ck0 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 99
  • Joined: 03-June 09

Posted 12 June 2009 - 04:01 AM

ich hab nun eine zeile code hinzugefügt und nun klappt es! ich denke, dass es so einfacher ist, als über logout(false). wobei man sicherlich die logout-methode um ein array erweitern kann, in dem die daten angegeben werden, die man behalten will, ähnlich zu den rules eben eine beschreibung.

hier der komplette code
[code=controllers/SiteController.php]<?php
/**
* Logout the current user and redirect to homepage.
*/
public function actionLogout()
{
// Sichern der Spracheinstellung
$tempLanguage = Yii::app()->session['_language'];
Yii::app()->user->logout();
// Öffnen einer neuen Session <<< das hier machts möglich ;)
Yii::app()->getSession()->open();
// Wiederherstellen der Spracheinstellung
Yii::app()->session['_language'] = $tempLanguage;
Yii::app()->language = $tempLanguage;
$this->redirect(Yii::app()->homeUrl);
}
?>[/code]
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users