PHP $_SESSION für mehrere Benutzer gleichzeitig

Lesezeit: 5 Minuten

Ich frage mich, wie das Array $_SESSION funktioniert. Wenn viele Benutzer meine Website verwenden, muss ich dann für jeden Benutzer ein Subarray festlegen? Zum Beispiel habe ich gerade jetzt

$_SESSION['userid'] = $userid;
$_SESSION['sessionid'] = $sessionid;
$_SESSION['ipaddress'] = $ipaddress;

aber um mit mehr Benutzern fertig zu werden, muss ich ein mehrdimensionales Array erstellen?

$_SESSION[$userid]['sessionid'] = $sessionid;
$_SESSION[$userid]['ipaddress'] = $ipaddress;

Wird die $_SESSION global pro Client oder nur insgesamt gehandhabt? Wird $_SESSION haben[‘userid’] Beim Login festlegen, den vorherigen Benutzer rausschmeißen und den zuletzt angemeldeten Benutzer einsetzen?

  • Soweit ich weiß, ist die Sitzung clientseitig, dh im Browser gespeichert. nicht serverseitig. In diesem Fall sollte es kein Problem sein, viele Benutzer gleichzeitig zu haben, da Sitzungen für jeden einzelnen Benutzer erstellt werden.

    – s3polz

    13. August 2012 um 9:26 Uhr

  • @s3polz da liegst du falsch. $_SESSION wird serverseitig gespeichert.

    – Loler

    13. August 2012 um 9:26 Uhr

  • @s3polz Sie sind durch die Sitzungskennung verwirrt, die im Browser-Cookie gespeichert ist, um die aktuelle Sitzung zu identifizieren, könnte auch von der URL übertragen werden.

    – Aurimas Ličkus

    13. August 2012 um 9:38 Uhr

  • ups sorry für meine falschen infos. aber die Sitzung wird trotzdem für jeden Benutzer separat erstellt, oder?

    – s3polz

    13. August 2012 um 9:49 Uhr

Benutzer-Avatar
Fluffeh

Nein. Es gibt einen separaten $_SESSION für jeden Benutzer erstellt. Dies wird alles vom Server erledigt, Sie müssen sich darum nicht kümmern. Behandeln Sie beim Schreiben Ihres Codes die $_SESSION als ob es nur einen Benutzer auf der Seite gäbe.

Bearbeiten: Eigentlich, wenn man darüber nachdenkt, ist es eine sehr gute Frage zu stellen. Es ist gut, diese Art von Fragen zu stellen, es bedeutet, dass Sie ernsthaft darüber nachdenken, wie Ihr Code funktioniert funktioniert wirklich. Fragen Sie diese Dinge weiter und testen Sie weiter. Ich habe das Gefühl, dass Sie eines Tages welche schreiben werden toll Code.

In diesem Sinne, hier sind einige Informationen von der Apache Seite? ˅:

Was ist eine Sitzung?

Der Kern der Sitzungsschnittstelle ist eine Tabelle mit Schlüssel- und Wertepaaren, die über Browseranforderungen zugänglich gemacht werden. Diese Paare können je nach Bedarf der Anwendung, die die Sitzung verwendet, auf eine beliebige gültige Zeichenfolge gesetzt werden.

Sitzungen auf dem Server halten

Apache kann so konfiguriert werden, dass Sitzungen pro Benutzer nachverfolgt werden, die auf einem bestimmten Server oder einer Gruppe von Servern gespeichert sind. Diese Funktionalität ähnelt den Sitzungen, die in typischen Anwendungsservern verfügbar sind.

Falls konfiguriert, werden Sitzungen mithilfe einer Sitzungs-ID nachverfolgt, die in einem Cookie gespeichert oder aus den in die URL-Abfragezeichenfolge eingebetteten Parametern extrahiert wird, wie sie in einer typischen GET-Anforderung zu finden sind.

Und von der PHP-Dokumente auf Sitzungen:

Die Sitzungsunterstützung in PHP besteht aus einer Möglichkeit, bestimmte Daten über nachfolgende Zugriffe hinweg beizubehalten. Dadurch können Sie individuellere Anwendungen erstellen und die Attraktivität Ihrer Website steigern.

Einem Besucher, der auf Ihre Website zugreift, wird eine eindeutige ID zugewiesen, die sogenannte Session-ID. Diese wird entweder nutzerseitig in einem Cookie gespeichert oder in der URL propagiert.

Die Sitzungsunterstützung ermöglicht es Ihnen, Daten zwischen Anfragen im superglobalen Array $_SESSION zu speichern. Wenn ein Besucher auf Ihre Website zugreift, prüft PHP automatisch (wenn session.auto_start auf 1 gesetzt ist) oder auf Ihre Anfrage (explizit durch session_start() oder implizit durch session_register()), ob eine bestimmte Sitzungs-ID mit der Anfrage gesendet wurde. Wenn dies der Fall ist, wird die zuvor gespeicherte Umgebung neu erstellt.

  • Und für diejenigen, die wissen wollen, wo sind $_SESSION gespeicherte Daten stackoverflow.com/questions/454635/…

    – Loler

    13. August 2012 um 9:29 Uhr

  • @Black_Stormy Es ist wirklich fantastisch und erfrischend zu sehen, wie Leute ihren Code verstehen und wissen wollen, wie er im Inneren funktioniert, anstatt nur auf das Beste zu hoffen.

    – Fluffeh

    13. August 2012 um 9:48 Uhr

  • Also danke für das vorweggenommene Kompliment! BEARBEITEN: Die Funktionen session_id () sind also so etwas wie der Name des Sitzungs-Subarrays für jeden Benutzer. $_SESSION[session_id][userid] aber man sieht es nie und muss sich nicht damit auseinandersetzen. Vielen Dank!

    – Abraham Brookes

    13. August 2012 um 9:49 Uhr


  • @Black_Stormy Wenn Sie darüber nachdenken, ist es eher so, als ob es ein Array wie dieses gibt: [userID]->_SESSION[] für jeden Benutzer.

    – Fluffeh

    13. August 2012 um 9:51 Uhr

  • Gibt es eine Möglichkeit, alle Sitzungsdetails auf einer einzigen Seite zu verwalten (z. B. diese Datei muss mit den Sitzungsdetails synchronisiert werden, wenn eine Sitzung zerstört oder eine neue Sitzung erstellt wird, sollte sie darin repliziert werden, ich brauche das, um den Benutzer aufzulisten, der alle sind derzeit auf der Website angemeldet)

    – Thirumalai-Murugan

    4. März 2013 um 6:14 Uhr

Nun, nachdem ich viel gesucht und an Sessions gearbeitet hatte, fand ich meinen eigenen Weg. Ich hoffe, es funktioniert gut für alle hier

Dies ist die Abfrage für die Anmeldeseite für meine Benutzer: Hier speichere ich E-Mails als Sitzung aus dem Eingabefeld, nachdem ich Daten aus MySQL abgeglichen habe

<?php
include_once("dbcon.php");
$que=mysqli_query($con,"select * from agents where companyemail="$email" AND 
pass="$password" AND post != 'Owner'"); 
$record = mysqli_fetch_assoc($que);
$_SESSION[$email]=$email;
header("Location:/dashboard/woresk/Dashboard_For_Agents/light/index.php? 
&loginid=$agentid");
?>

und dann gibt es im Dashboard für Benutzer eine Abmeldeoption, bei der ich diese Methode verwendet habe

<?php
session_start();
include_once("dbcon.php");
$sid=$_GET['loginid'];
$que=mysqli_query($con,"select * from agents where id='$sid'"); 
$recorde = mysqli_fetch_assoc($que);
$email=$recorde['companyemail'];
unset($_SESSION[$email]); 
header('location:/dashboard/woresk/index.php');
?>

und um zu vermeiden, dass Benutzer das Dashboard betreten, wenn sie nicht angemeldet sind oder ihre Sitzung nicht festgelegt ist, funktioniert der folgende Code hervorragend für mich

<?php
session_start();
include_once("dbcon.php");
$sid=$_GET['loginid'];
$que=mysqli_query($con,"select * from agents where id='$sid'"); 
$recorde = mysqli_fetch_assoc($que);
$email=$recorde['companyemail'];
if(isset($_SESSION[$email]) && isset($_SESSION['alllogout'])){

 }
 else if(!isset($_SESSION[$email])){
    echo 
    "<script>
      window.location.href="https://stackoverflow.com/dashboard/woresk/index.php"
    </script>";
  }
  else if (!isset($_SESSION['alllogout'])){
    echo 
    "<script>
      window.location.href="https://stackoverflow.com/dashboard/woresk/index.php"
    </script>";
  }
  ?>

ich hoffe das funktioniert auch bei anderen. Wenn Sie Fragen haben, lassen Sie es mich bitte wissen

  • Hey Mann, du verwendest ein sehr altes SQL-Zeug – das solltest du nicht verwenden mysqli_fetch_assoc – Stattdessen sollten Sie die PDO-Klasse und vorbereitete Anweisungen verwenden. lesen Sie dies: phpdelusions.net/pdo alles lesen. aufleveln!

    – Abraham Brookes

    24. September 2019 um 5:15 Uhr

  • Dies enthält einige SQL-Injection-Schwachstellen und sollte um jeden Preis vermieden werden.

    – Halber

    1. März 2020 um 14:50 Uhr

1175130cookie-checkPHP $_SESSION für mehrere Benutzer gleichzeitig

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy