Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Sessions mit PHP

Empfohlene Antworten

Veröffentlicht

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:

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

Danke, werde ich heute Nachmittag gleich ausprobieren!

Eine Frage zu dem Cookie...

Wo wird der gespeichert, auf dem Server oder Client?

Das Cookie liegt auf dem Client. Es wird zum automatischen Login benutzt. Dürfte hier im Board auch so oder ähnlich laufen.

MfG

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

vergesst den Beitrag...habs verstanden was ihr wollt...*andenkopfgreif* :)

@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

Originally posted by iCErAIN

LINK:)

Hey, der Link ist cool, danke!

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?

Ach ja, und besten Dank!

Slayer8

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.