klare sache.
daher folgende anekdote, die soeben ihren abschluss fand. auf dass einige daraus ein paar wissenswerte dinge behalten und vielleicht einiges grübeln überspringen können.
auf unserer site (s. sig) benutze ich url-rewriting mittels mod_rewrite, um hübschere, kürzere, implementierungsgekapselte und suchmaschinenfreundlichere urls zu erzeugen, etwa:
/news/
/news/123/ (news #123)
/articles/cube-projekt/
/articles/cube-projekt/4/ (seite 4)
/articles/cube-projekt/print/ (druckansicht)
/text/feeds/
/text/media/
oder die urls der rss-feeds, hinter dessen .xml-maske in wirklichkeit python-scripts stecken.
nun habe ich kürzlich einige änderungen vorgenommen. die folge war, dass ich plötzlich bei direkt (ohne rewriting zu benutzen) aufgerufenen scripts das gewohnte bild hatte, bei über rewriting aufgerufenen seiten jedoch nicht als eingeloggt erschien. dabei kann es sich durchaus um die gleichen scripts handeln, die aufgerufen wurden, nur schien das rewriting da gravierend einzugreifen.
meine ersten vermutungen, dass die bei rewriting nicht mit übergebene PHPSESSID schuld war, bestätigte sich zurecht nicht. zwar benutze ich sessions, beim login jedoch nur ein cookie ohne session.
details zum hosting und zur site:
unter anderem werden verzeichnisse wie /test/ automatisch aufgelöst, wenn eine datei /test.php besteht. daher musste ich z.b. news.php umbenennen, verschieben o.ä.
alle aufrufenden scripts (bestehend aus mehreren sektionen für anzeige und sections, so dass z.b. alles rund um news oder forum in jeweils einer datei und klasse zusammengefasst ist) lagen ursprünglich im wurzelverzeichnis und wurden nach und nach in ein unterverzeichnis verschoben. neulich habe ich das mit den restlichen gemacht.
wichtig ist besonders das script, dass den login und das entsprechende cookie verwaltet. das habe ich erst kürzlich verschoben.
seit einigen tagen total verzweifelt und schon fast diesen misstand akzeptierend, hat mich die erinnerung an die cookie-details von Fx (firefox) auf den weg gebracht: der pfad des cookies! ja, cookies werden nach host und nach pfad vergeben.
problemursache also: das cookie wurde früher vom script im wurzelverzeichnis gesetzt, jetzt aber von selben script aus einem unterverzeichnis. daher war der pfad nicht mehr / und hat somit den zugriff außerhalb jenes verzeichnisses blockiert. da aber o.g. rewriting von / an diverse urls erzeugt, haben diese das cookie verloren und man erschien ausgeloggt. also einfach beim setzen des cookies den pfad wieder aufs wurzelverzeichnis setzen und fertig ist der lack (= tut wieder)!
ergo: DON'T F*CK WITH COOKIES!