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

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

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.

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()-&gt;session&#91;&#039;_language&#039;];


	Yii::app()-&gt;user-&gt;logout();


	// Wiederherstellen der Spracheinstellung


	Yii::app()-&gt;session&#91;&#039;_language&#039;] = $tempLanguage;


	Yii::app()-&gt;language = $tempLanguage;


	$this-&gt;redirect(Yii::app()-&gt;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.

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

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]

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 ;)

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()-&gt;session&#91;&#039;_language&#039;];


	Yii::app()-&gt;user-&gt;logout();


	// Öffnen einer neuen Session &lt;&lt;&lt; das hier machts möglich <img src='http://www.yiiframework.com/ipb/public/style_emoticons/default/wink.gif' class='bbc_emoticon' alt=';)' />


	Yii::app()-&gt;getSession()-&gt;open();


	// Wiederherstellen der Spracheinstellung


	Yii::app()-&gt;session&#91;&#039;_language&#039;] = $tempLanguage;


	Yii::app()-&gt;language = $tempLanguage;


	$this-&gt;redirect(Yii::app()-&gt;homeUrl);


}

?>[/code]