PHP Session (Cokie) Problem beim aufruf über eine Subdomain
-
Als ich im Quellcode eine Javascript Methode hinzugefügt habe, um per Alert("") Informationen aus zu geben, verschwand auf einmal das Problem, das nach dem Login wieder sofort ausgelogt wird. Jetzt habe ich einen verdacht: Meine hinzugefügte Javascript Methode wird von PHP in die erste Zeile und erste Spalte in der HTML-Datei generiert und alle darauf folgende Javascript Methoden enthalten eine Zusatzangabe UTF8. Meine an erster stelle stehende Javascript einleitung aber nicht, lediglich type="text/javascript".
<script type="text/javascript">alert("sessionName: ajax_chat\n sessionCookiePath: /\n sessionCookieDomain: \n sessionCookieSecure: ");</script><?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de" dir="ltr"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" /> <title>AJAX Chat</title> <style type="text/css"> body { padding:0; margin:0; } </style> <link rel="alternate stylesheet" type="text/css" href="css/beige.css" title="beige"/><link rel="alternate stylesheet" type="text/css" href="css/black.css" title="black"/><link rel="alternate stylesheet" type="text/css" href="css/grey.css" title="grey"/><link rel="alternate stylesheet" type="text/css" href="css/Oxygen.css" title="Oxygen"/><link rel="alternate stylesheet" type="text/css" href="css/Lithium.css" title="Lithium"/><link rel="alternate stylesheet" type="text/css" href="css/Sulfur.css" title="Sulfur"/><link rel="alternate stylesheet" type="text/css" href="css/Cobalt.css" title="Cobalt"/><link rel="alternate stylesheet" type="text/css" href="css/Mercury.css" title="Mercury"/><link rel="alternate stylesheet" type="text/css" href="css/Radium.css" title="Radium"/><link rel="stylesheet" type="text/css" href="css/prosilver.css" title="prosilver"/><link rel="alternate stylesheet" type="text/css" href="css/subsilver2.css" title="subsilver2"/><link rel="alternate stylesheet" type="text/css" href="css/subblack2.css" title="subblack2"/><link rel="alternate stylesheet" type="text/css" href="css/subSilver.css" title="subSilver"/><link rel="alternate stylesheet" type="text/css" href="css/Core.css" title="Core"/><link rel="alternate stylesheet" type="text/css" href="css/MyBB.css" title="MyBB"/><link rel="alternate stylesheet" type="text/css" href="css/vBulletin.css" title="vBulletin"/> <!--[if lt IE 7]> <link rel="stylesheet" type="text/css" href="css/ie5-6.css"/> <script type="text/javascript"> var isIElt7 = true; </script> <![endif]--> <script src="js/chat.js" type="text/javascript" charset="UTF-8"></script> <script src="js/custom.js" type="text/javascript" charset="UTF-8"></script> <script src="js/lang/de.js" type="text/javascript" charset="UTF-8"></script> <script src="js/config.js" type="text/javascript" charset="UTF-8"></script> <script src="js/FABridge.js" type="text/javascript" charset="UTF-8"></script> <script type="text/javascript"> // <![CDATA[
-
Das Problem ist nach wie vor nicht festgestellt. Die Session wird über eine Subdomian aufgerufen bzw. erstellt und diese Subdomain steht auch während der Session in der Adresszeile des Webbrowsers. Dennoch werden alle objekte die über die Subdomain aufgerufen werden, über die Topdomain mit Unterverzeichnisnamen-Angabe adressiert. So stand in dem Fenstertitel von der Javascript-Function-Alert die vollständige Topdomain adresse inkl. Unterordner. Obwohl trotz Subdomain alle Objekte über die Topdomain adressiert werden, kann ich aber wiederum nicht direkt die Objekte per Topdomain und Unterverzeichnisangabe (www.domain.com/unterverzechis) aufrufen. Dann findet er sie nicht (error 404). Dieser unterordner ist über den Webbrwoser als nur unter der Subdomain, die direkt auf diesen Unterordner verweist, sichtbar. Dennoch werden dann alle objekte die über die Subdomain abgerufen werden, mit der Topdomain adressiert.
Ich vermute daher, dass die Cokies, die Topdomain (inkl. /Ordnername) URL enthalten, der Server dieser Session seine URL-Umgebung sieht die gleich mit der Subdomain (ohne /Ordnername) ist, daher meint er das es sich nicht um den selben Clienten handelt.
Blos ist natürlich meine eigentliche Frage was ist da falsch konfiguriert?
-
Kannst du das ganze mit etwas weniger verwirrenden Worten erklaeren, zB ein kleines Beispiel machen. Denn mir ist nicht klar warum du von einer Subdomain und dann wieder von keiner sprichst.
Ansonsten lass dir das Cookie ausgeben und vergleiche die beiden Pfade (dort wo das Cookie generiert wurde und dort wohin das Cookie nicht korrekt gesendet wurde).
-
Ich verstehe ja auch nicht so ganz was da passiert. Die ganz normale Domain, also die Topdomain, verweist auf den obersten html ordner, dieser enthält natürlich eine index.php und so weiter. Nun habe ich aber in diesem html Ordner noch Unterordner die weniger mit der Website html/index.php zu tun hatt. Also eigentlich ganz andere Websites. Damit aber nicht umständlich über den Topdomain und /Unterverzeichnis die im Unterordner liegende website (index.php) aufrufen muss, kann man ja eine Subdomain verwenden, die direkt auf die Website verweist die in dem Unterordner ist.
Und in diesem Unterordner habe ich jetzt eine Website, die u.a. auch Cokies erstellt. Die Cokies enthalten als Host '.Topdomain.Länderendung' und als Pfad '/'.
Sobald er solch ein Cokie erstellt hat, ist das Script der Meinung, dass das nicht sein Cokie sei oder ich weiss nicht warum.
-
Hallo,
ich vermute schon fast dass das Problem gar nicht in der (Sub-)Domain oder dem Verzeichnis liegt.
Lies dich hier mal durch und schau ob du nicht irgendeinen anderen Fehler hast.
VlG
-
RandomAccess85 schrieb:
Hallo,
ich vermute schon fast dass das Problem gar nicht in der (Sub-)Domain oder dem Verzeichnis liegt.
Lies dich hier mal durch und schau ob du nicht irgendeinen anderen Fehler hast.
VlG
Also hat mich leider auch nicht weitergebracht, da ich das dort beschriebene bereits weis. Das bei einer Variablen-Ausagbe per Echo, der voher keinen Wert zugewiesen wurde, nichts raus kommt ist klar. Genauo so ist mir klar das in einem Cokie eigentlich wiederum auch nur Variablen mit dem jeweiligen zuweisungswert sind. Die fähigkeit logisch mechanisch zu denken habe ich schon. Nur leider kennt man eben in der IT-Welt nicht alle notwendigen Fakten, um es korrekt sich um Kopf theoretisch durchgehen zu lassen. Wer kennt auch schon das Hintergrundwissen eines Webservers, oder des PHP Interpreters? Ich denke bei mir liegt vielmehr das Problem, das ich nicht weiss wie mein Webserver arbeitet. Ich kann zwar die PHP-Settings Inforamtionen auslesen aber sor richtig schlau werde ich daraus auch nicht.
Ich bin mir zu fast 90% sicher, das irgenwie duch die verwendung eines Subdomain, der Cokie anders erstellt wird, als er soll. Folglich fält der Cokie bei einer IF oder ähnlichen Prüfung im Script durch und das Script beginnt wieder die Funktion aufzurufen ein Cokie zu erstellen, dieses wird aber wieder anders als es eigentlich sollte, damit geht das Spiel wieder von vorne los. Ich bin mir ziemlich sicher, dass das Script im Moment der Cokie erstellung in der Umgebungsvariable eine andere Adresse enthält, als im Moment der Cokie-Exiztens überprüfung. Folglich ist der Wert nicht gleich, foglich, sieht das Script, dass es nicht sein Script ist (ironisch gemeint) und sagt sich der hat noch kein Cokie und deshalb erstellen wir jetzt eins, also die Funktion aufrufen die ein Cokie erstellt.
Das einzige was ich noch nicht wusste ist das man keine Ausagbe vor einem setcokie machen darf.
-
Vllt machst du endlich mal das beispiel zu dem du aufgefordert wurdest.
Oder noch besser, zeig gleich die stelle wie sie in echt ist.
Dann kann man dir vllt Helfen.Wir sitzen auch nur vor einem PC und nicht vor einer Glaskugel.
Du musst schon code zeigen, damit wir dir sagen können wo der fehler ist.
-
html
html/index.php
html/InterAnonymChat
html/InterAnonymChat/index.php
html/InterAnonymChat/Chat
html/InterAnonymChat/Chat/index.phpwww.Domain.com = html/index.php
www.Subdomain.Domain.com = html/InterAnonymChat/index.php
index.php from www.Subdomain.Domain.com enthält ein iFrame src="Chat" (ladet Chat/index.php in den iFrame)function startSession() { $this->setConfig('sessionCookiePath', null, '/'); $this->setConfig('sessionCookieDomain', null, 'Topdomain.com'); if(!session_id()) { // Set the session name: session_name($this->getConfig('sessionName')); // Set session cookie parameters: session_set_cookie_params( 0, // The session is destroyed on logout anyway, so no use to set this $this->getConfig('sessionCookiePath'), $this->getConfig('sessionCookieDomain'), $this->getConfig('sessionCookieSecure') ); // Start the session: session_start(); // We started a new session: $this->_sessionNew = true; } } function destroySession() { if($this->_sessionNew) { // Delete all session variables: $_SESSION = array(); // Delete the session cookie: if (isset($_COOKIE[session_name()])) { setcookie( session_name(), '', time()-42000, $this->getConfig('sessionCookiePath'), $this->getConfig('sessionCookieDomain'), $this->getConfig('sessionCookieSecure') ); } // Destroy the session: session_destroy(); } else { // Unset all session variables starting with the sessionKeyPrefix: foreach($_SESSION as $key=>$value) { if(strpos($key, $this->getConfig('sessionKeyPrefix')) === 0) { unset($_SESSION[$key]); } } } }
Website: Topdomain.com Cokie-Name: ajax_chat_style Name: ajax_chat_style Inhalt: prosilver Domain: .Topdomain.com Pfad: / Senden für: Jeden Verbindungstyp Gültig bis: Donnerstag, 16. Juni 2011 16:49:58
Website: Topdomain.com Cokie-Name: ajax_chat_settings Name: ajax_chat_settings Inhalt: bbCode%3Dtrue%26bbCodeImages%3Dtrue%26bbCodeColors%3Dtrue%26hyperLinks%3Dtrue%26lineBreaks%3Dtrue%26emoticons%3Dtrue%26autoFocus%3Dtrue%26autoScroll%3Dtrue%26maxMessages%3D0%26wordWrap%3Dtrue%26maxWordLength%3D32%26dateFormat%3D(%2525H%253A%2525i%253A%2525s)%26persistFontColor%3Dfalse%26fontColor%3Dnull%26audio%3Dtrue%26audioVolume%3D1%26soundReceive%3Dsound_1%26soundSend%3Dsound_2%26soundEnter%3Dsound_3%26soundLeave%3Dsound_4%26soundChatBot%3Dsound_5%26soundError%3Dsound_6%26blink%3Dtrue%26blinkInterval%3D500%26blinkIntervalNumber%3D10 Domain: .Topdomain.com Pfad: / Senden für: Jeden Verbindungstyp Gültig bis: Donnerstag, 16. Juni 2011 16:49:58
-
Bemueh dich bitte etwas mehr den relevanten Code herzuzeigen. Du zeigst zB 2 Cookies wovon nur eins im Code gesetzt wird und wir nicht wissen welches.
destroySession ist eigentlich uninteressant, oder rufst du es irgendwann in dem relevanten Code auf? Wenn ja: warum? Und warum unterscheidest du zwischen einer neuen und einer "alten" Session?
Relevante Info:
wie wird das Cookie gesetzt dass du vermisst? Wie sehen die Daten aus die der Client bekommt und ueber welche URL wird es denn gesetzt.Was fuer Daten werden an die subdomain URL geschickt? (vom Client).
Ich sehe zB auch keine UID oder aehnliches die gesetzt wird. Also versuch dir zu ueberlegen was wir fuer infos brauchen und poste die dann...
-
function getXMLMessages() { switch($this->getView()) { case 'chat': return $this->getChatViewXMLMessages(); case 'teaser': return $this->getTeaserViewXMLMessages(); case 'logs': return $this->getLogsViewXMLMessages(); default: return $this->getLogoutXMLMessage(); } }
Das Feld aus dem Array, das per getView() abgerufen wird enthält nichts.
-
Hallo,
ich glaube langsam, du hast gar keine Ahnung was du da machst. Du solltest dich vielleicht erst mit grundlegenderen Dingen beschäftigen, bevor du anfängst irgendwelche AJAX-Chats zusammen zu klicken.
Wieso ich das behaupte?
=> Der gezeigte Code trägt nicht im Ansatz zum Cookie-Problem bei und wird wohl auch nicht die Ursache des Problems sein.VlG
-
RandomAccess85 schrieb:
Hallo,
ich glaube langsam, du hast gar keine Ahnung was du da machst. Du solltest dich vielleicht erst mit grundlegenderen Dingen beschäftigen, bevor du anfängst irgendwelche AJAX-Chats zusammen zu klicken.
Wieso ich das behaupte?
=> Der gezeigte Code trägt nicht im Ansatz zum Cookie-Problem bei und wird wohl auch nicht die Ursache des Problems sein.VlG
NOOB! Die Function getLogoutXMLMessage() wird aufgerufen. Es folgt die Logout Site.
-
LiGERWooD schrieb:
NOOB!
Wieso wundert mich das nicht.
Mach' deine Hausaufgaben und überlege dir, ob dir so nochmal jemand hier helfen wird oder nicht.