Slayer8 Geschrieben 23. Oktober 2002 Geschrieben 23. Oktober 2002 Hallo! Ich habe folgendes Problem, und zwar sollte ich ein Forum programmieren. Für dieses benötige ich auch Sessions und erledigte das mit der Sessionsverwaltung von PHP. Jede Session wurde in einer TMP Datei auf dem Server gespeichert. Auf meinem lokalen Entwicklungsrechner/server mit Apache funktionierte dies auch, als ich das Forum jedoch auf unseren (richtigen) Webserver (welcher von einem externen Anbieter betrieben wird) lud, wurden die Sessions nicht mehr übergeben. Den Fehler habe ich schon gefunden, der Anbieter erlaubt nicht, daß Dateien auf dem Server gespeichert werden. Wie kann ich nun meine Sessions speichern? Es ginge noch über eine Datenbank oder Cookies auf dem Client, nur wie? :confused: Zitieren
DanielH Geschrieben 23. Oktober 2002 Geschrieben 23. Oktober 2002 Hi, über eine Datenbank ist es eigentlich recht einfach. Du generierst eine Sessionid und speicherst diese zusammen mit userdaten in der Datenbank ab. Genauso wie du es auch mit den sessions machst. <?PHP function userauth($sid){ global $db; global $auth; $db->query("SELECT id, name, sessid, lastvisit, lastactive FROM user_online WHERE sessid = '$sid'"); $row=$db->fetch(); $db->free(); if(!empty($row["id"])){ $i=0; $i++; $auth["user"][$i]["lastvisit"] = $row["lastvisit"]; $auth["user"][$i]["id"] = $row["id"]; $auth["user"][$i]["name"] = $row["name"]; $auth["user"][$i]["sessid"] = $row["sessid"]; $auth["user"][$i]["check"] = 1; $db->query("INSERT INTO user_online (id,name,sessid,lastvisit,lastactive) VALUES ('".$row["id"]."','".$row["name"]."','".$row["sessid"]."','".$auth["user"][$i]["lastvisit"]."','".time()."'"); $db->free(); } else { //User noch nicht online //existiert ein Cookie ? if(isset($User)){ //User automatisch einloggen $db->query("SELECT id, name, sessid FROM any_user_table WHERE sessid = ".$HTTP_COOKIE_VARS["sessid"].""); $row=$db->fetch(); $db->free(); //Prüfen, ob sessid aus Cookie auch existiert if(!empty($row["id"])){ $i=0; $i++; $auth["user"][$i]["lastvisit"] = $User["lastvisit"]; $auth["user"][$i]["id"] = $row["id"]; $auth["user"][$i]["name"] = $row["name"]; $auth["user"][$i]["sessid"] = $row["sessid"]; $auth["user"][$i]["check"] = 1; $db->query("INSERT INTO user_online (id,name,sessid,lastvisit,lastactive) VALUES ('".$row["id"]."','".$row["name"]."','".$row["sessid"]."','".$HTTP_COOKIE_VARS["lastvisit"]."','".time()."'"); setcookie ("User[sessid]", $row["sessid"], time()+31536000); setcookie ("User[lastvisit]",time(), time()+31536000); } else { //User ist "Gast" $i=0; $i++; $auth["user"][$i]["check"] = 0; } } else { //User ist "Gast" $i=0; $i++; $auth["user"][$i]["check"] = 0; } } //Alle rausschmeissen, die länger als 10 Min inaktiv waren. $past = time()-600; $db->query("DELETE FROM user_online WHERE lastactive < $past"); } ?> [/PHP] Hier mal eine Userauthentifizierung mit MySQL-Datenbank (über Abstraction-Layer) MfG Zitieren
Slayer8 Geschrieben 24. Oktober 2002 Autor Geschrieben 24. Oktober 2002 Danke, werde ich heute Nachmittag gleich ausprobieren! Eine Frage zu dem Cookie... Wo wird der gespeichert, auf dem Server oder Client? Zitieren
DanielH Geschrieben 24. Oktober 2002 Geschrieben 24. Oktober 2002 Das Cookie liegt auf dem Client. Es wird zum automatischen Login benutzt. Dürfte hier im Board auch so oder ähnlich laufen. MfG Zitieren
iCErAIN Geschrieben 24. Oktober 2002 Geschrieben 24. Oktober 2002 ich weiss das es umständlich ist, aber ich handle das so das ich meine sessions in jedem link und formular an die nächste seite übergebe: LINK:) geht aber somindest schneller als immer wieder die session aus der db zu lesen bzw wieder dort zu speichern...außerdem haben ja immernoch einige clienten cookies deaktiviert...die bösen:) Zitieren
iCErAIN Geschrieben 24. Oktober 2002 Geschrieben 24. Oktober 2002 vergesst den Beitrag...habs verstanden was ihr wollt...*andenkopfgreif* Zitieren
DanielH Geschrieben 24. Oktober 2002 Geschrieben 24. Oktober 2002 @slayer8 du solltest aber nicht vergessen, die session-id manuell an deine Links anzuhängen. Wenn dein Hoster keine session-dateien zulässt, könnte auch das automatische anhängen deaktiviert sein. MfG Zitieren
Slayer8 Geschrieben 24. Oktober 2002 Autor Geschrieben 24. Oktober 2002 Originally posted by iCErAIN LINK:) Hey, der Link ist cool, danke! Zitieren
Slayer8 Geschrieben 25. Oktober 2002 Autor Geschrieben 25. Oktober 2002 Hi! @DanielH Muß ich das Skript dann nicht in jede Seite includen, damit die Session (ID) immer auf ihre Gültigkeit überprüft wird, oder übergebe ich nur die Logindaten an diese Seite? Zitieren
Slayer8 Geschrieben 25. Oktober 2002 Autor Geschrieben 25. Oktober 2002 Ach ja, und besten Dank! Slayer8 Zitieren
DanielH Geschrieben 25. Oktober 2002 Geschrieben 25. Oktober 2002 Die Gültigkeitsprüfung findet auf jeder Seite statt, wo man sie benötigt Einfach includen, und in der Include-Datei hab ich dann noch folgenden Code eingebaut: (empty($HTTP_GET_VARS["sid"]) ? userauth("") : userauth($HTTP_GET_VARS["sid"])); [/PHP] Somit braucht man sich um nix mehr zu kümmern. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.