mod_rewrite und Session
Sven Burkert
- webserver
0 Cheatah0 Akela0 Sven Burkert0 Akela0 Sven Burkert0 Akela0 Sven Burkert0 Akela
Hallo,
sobald ich meine .htaccess-Datei aktiviere, funktionieren auf meiner Webseite keine PHP-Sessions mehr.
Ich vermute mal, dass das Cookie, in der die Session gespeichert wird, durch die URL-Umwandlungen in htaccess nicht mehr gefunden wird, oder?
Die htaccess sieht so aus:
Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?sbtheke.de
RewriteRule ^(.*)madtv/(.*)$ http://www.madtv-online.com [R,L]
RewriteRule ^(madtv|madtv2) - [L]
RewriteCond %{HTTP_HOST} ^(www.)?madtv-online.com
RewriteRule ^(.*) /madtv/$1 [L]
Hi,
Ich vermute mal, dass das Cookie, in der die Session gespeichert wird, durch die URL-Umwandlungen in htaccess nicht mehr gefunden wird, oder?
richtig. Du forcierst einen Redirect über den Client, der ergo eine neue Ressource anfordert und auch neu entscheidet, welche Cookies mitgeliefert werden. Da es sich um eine komplett neue Domain handelt, ist es unmöglich[1], dass jemals irgend ein Cookie auf beiden Systemen nutzbar ist. Wenn Du Deinen Server also nicht zum Proxy machen möchtest[2], bleibt Dir nur, einen anderen Weg der Session-Identifizierung zu wählen.
Cheatah
[1] Bei der derzeitigen Implementierung der Cookie-Standards.
[2] Wobei ich gerade nicht auswendig weiß, ob Cookies hierbei weitergeleitet werden.
richtig. Du forcierst einen Redirect über den Client, der ergo eine neue Ressource anfordert und auch neu entscheidet, welche Cookies mitgeliefert werden.
Ok, ich habe nun die Zeilen mit dem Redirekt rausgeworfen - trotzdem wird bei jedem Seitenaufruf eine neue Session-ID generiert. Wieso das?
Hallo,
jetzt mal so ins Blaue rein: Hast Du in Deiner httpd.conf für dieses Verzeichnis die Regel AllowOverride gesetzt ?
Funktionieren die nur die Sessions nicht mehr oder bekommst Du eine Fehlermeldung des Servers ?
ciao Andreas
jetzt mal so ins Blaue rein: Hast Du in Deiner httpd.conf für dieses Verzeichnis die Regel AllowOverride gesetzt ?
Nein, habich nicht. Sollte ich?
Funktionieren die nur die Sessions nicht mehr oder bekommst Du eine Fehlermeldung des Servers ?
Die Anweisungen in der htaccess funktionieren wunderbar und machen genau das, was sie sollen :) Nur die Sessions funktionieren nicht mehr, erst wenn ich die htaccess lösche gehen Sessions wieder.
Hallo,
Optionen innerhalb einer htaccess werden nur dann akzeptiert, wenn Du in der httpd.conf die Erlaubnis dazu gibst. Das geschieht mit Allowoverride und der betreffenden Option. Wenn Dein Apache allerdings mit
AllowOverride none
eingestellt ist, ziehen Deine Options aus der htaccess nicht.
Da Du aber schreibt, daß sonst alles funktioniert, vermute ich, daß Du den AllowOverride richtig eingestellt hast oder dieser defaultmäßig in Deiner httpd.conf auf
AllowOverride all
eingestellt ist. Falls das zweite der Fall ist, solltest Du darauf achten, daß in Deinem htaccess-Verzeichnis kein fremder Schreibrechte hat, da dieser sonst keine Schweinereien anrichten kann, indem er Deine htaccess anpasst.
Kannst Du mal den Anfang Deiner php-Datei liefern ?
Mich würde interessieren, wie Du Deine Sessions anwendest.
ciao Andreas
Kannst Du mal den Anfang Deiner php-Datei liefern ?
Mich würde interessieren, wie Du Deine Sessions anwendest.
Ich hab 2 PHP Dateien. In der ersten schreibe ich einen Wert in die Session, in der 2. lese ich diesen Wert aus.
Allerdings ist die Session-ID immer eine andere, wenn ich die erste Datei mehrmals aufrufe:
session_start();
$_SESSION['ss'] = "ddd";
echo print_r($_SESSION);
echo session_name()."sessid=".session_id();
Hallo Sven,
war zwischenzeitlich was essen. Muß auch mal sein ;-)
Ich werfe mal wertfrei ein paar Ideen in den Raum:
Poste mal alle Deine php.ini-Einstellungen, die mit session beginnen
ciao Andreas
- Ist die php.ini auf beiden Servern die gleiche ?
Ich habe 2 Domains und ein Hostingpaket - also die gleiche php.ini
- Machst Du ein session_destroy ?
Nein
- Funktionierte das schon mal bei Dir ?
Es funktioniert, wenn ich die htaccess lösche
Poste mal alle Deine php.ini-Einstellungen, die mit session beginnen
Kann dir nur die phpinfo posten:
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain sbtheke.de no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
..
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies On Off
session.use_trans_sid Off Off
Interessant ist bestimmt, dass cookie_domain sbtheke.de ist. Aber wieso funktionieren die Cookies, die ich selbst setze?
Hi,
versuche mal
session.cookie_domain =
Versuche mal mit
ini_set ( "session.cookie_domain", "" );
Deine Domain auf Standard zu setzen. Befürchte aber schon, daß das nicht funktioniert, da die Provider sowas meist verhindern.
Ansonsten weiß ich jetzt auch nicht mehr weiter, sorry.
ciao Andreas
ini_set ( "session.cookie_domain", "" );
Cool, scheint zu funktionieren: Beim mehrmaligen Aufruf von der Test-PHP-Datei (die mir die Session-ID ausgibt) habe ich nun immer die gleiche :)