Veröffentlicht 23. Oktober 200222 j 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:
23. Oktober 200222 j 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
24. Oktober 200222 j Danke, werde ich heute Nachmittag gleich ausprobieren! Eine Frage zu dem Cookie... Wo wird der gespeichert, auf dem Server oder Client?
24. Oktober 200222 j Das Cookie liegt auf dem Client. Es wird zum automatischen Login benutzt. Dürfte hier im Board auch so oder ähnlich laufen. MfG
24. Oktober 200222 j 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:)
24. Oktober 200222 j @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
25. Oktober 200222 j 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?
25. Oktober 200222 j 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.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.