Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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:

Geschrieben

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

Geschrieben

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:)

Geschrieben

@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

Geschrieben

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?

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...