Seite 1 von 1

[Gelöst] Immer wieder neue Session - wieso?

Verfasst: 25.08.2005 15:41
von LordZed
Hi Leute! Ich hab ne Frage zum Session-Management von phpBB, denn entweder check ich da was nicht, oder was auch immer.

Es ist folgendermaßen! Auf meiner Site stelle ich verschiedene Designs zur Auswahl und die Auswahl wird in der Session gespeichert. Wurde keine Auswahl getroffen wird automatisch das 1. Design gewählt. Jetzt wollte ich, damit er nicht nach einem Seitenwechsel - z.B. zum Forum der Seite und zurück - das Design auf's erste setzt, das Design mit in der Session speichern.

Alle meine Links habe ich in die Funktion append_sid() gepackt, so dass er die SID automatisch anhängt, wenn's nötig ist. An dieser Stelle habe ich 2 Fragen:

1) Wann hält er es für nötig die SessionID anzuhängen?
2) Wieso habe ich nach ein paar (2 oder so) Seitenwechseln immer ne neue SessionID, wodurch das Design auf 1 gesetzt wird, weil ja keines per GET übergeben wurde, aber in der NEUEN Session auch keines steht.

Hoffe ihr versteht mein Problem! Hier der meiner Meinung nach relevante Teil von Code, falls da der Fehler liegen sollte:

Code: Alles auswählen

<?
	ob_start();

	//Benötigte Dateien und Variablen von phpBB
	define('IN_PHPBB', true);
	$phpbb_root_path = $_SERVER['DOCUMENT_ROOT'].'/forum/';
	include($phpbb_root_path . 'extension.inc');
	include($phpbb_root_path . 'common.'.$phpEx); 
	
	//Session auslesen und Benutzer-Informationen laden
	$userdata = session_pagestart($user_ip, PAGE_WEBSITE);
	init_userprefs($userdata);
	
	//An dieser Stelle wird das Design ausgewählt und in die Session-Tabelle von phpBB eingetragen

	require ('modules/db/db.php');
Und hier ein Beispiel für einen mit append_sid() "bestückten" Link:

Code: Alles auswählen

<a href="<?=append_sid('index.php?page=news');?>"><img src="design/wow1/menu_point_blue.gif" border="0" alt="[x]"> News</a>
Ich hoffe ihr wisst, was ich von euch wissen will! :) Wenn nicht, dann fragt einfach nach! :) Eigentlich geht es mir am meisten darum, dass die Session nicht ständig eine neue ist...
ach und noch was!

Ist es irgendwie möglich, dass die Designauswahl vielleicht auch beim User zusammen mit dem Benutzernamen als Cookie gespeichert wird? Also klar - kann selber Cookie setzen, aber der soll ja auch bei einem Logout auch wieder gelöscht werden! Wie kann ich das irgendwie arrangieren?

Bin ein bissl weiter gekommen!

Verfasst: 31.08.2005 19:58
von LordZed
Also ich bin in meinem o.g. Problem inzwischen ein bissl weiter gekommen. Ich habe herrausgefunden, dass die SessionID entweder immer vor dem Include des Content-Teiles angehänt wird, oder immer ab der Stelle.

Für mich heißt das, dass dort irgendwo etwas passiert, was mir die SessionID löscht, oder was auch immer.
Wann genau hängt denn die Funktion append_sid() die SessionID an und wann nicht? Kann mir das einer von euch sagen?

Ich dachte mir es liegt an irgendwelchen phpBB-Files die ich im Content vielleicht Include, und da bin ich in einer Datei auf folgende Zeilen gestoßen:

Code: Alles auswählen

      include($phpbb_root_path . 'extension.inc');
      include($phpbb_root_path . 'config.'.$phpEx);
      include($phpbb_root_path . 'includes/functions.'.$phpEx);
      include($phpbb_root_path . 'includes/db.'.$phpEx);
Könnten diese Zeilen etwas damit zu tun haben?
Ich hab mir gedacht, da er ja in der Hauptseite die in meinem ersten Beitrag reingeschriebenen includes durchführt könnte es daran liegen, dass er irgendetwas doppelt läd oder wie auch immer!
Jedenfalls brauche ich dringend hilfe! :) Mir würde glaube ich schon weiterhelfen, wenn mir jemand sagt, wann genau append_sid() eine SessionID an die URL anhängt und wann nicht!

//EDIT
Problem gelöst! Ich hatte einen Newsticker noch vor dem Contentteil drin und der hatte eine Funktion, in der die funktion session_pagestart() erneut ausgeführt wurde, was logischerweise zum erstellen einer neuen Session führt. Dies hab ich damals gemacht, weil die Variable $userdata nicht global verfügbar war. Habe sie nun mir

Code: Alles auswählen

global $userdata;
global verfügbar gemacht.