it-swarm.com.de

Wie überprüft Drupal) Sitzungen anhand des Cookie-Werts?

Entschuldigung, ich weiß, dass es komisch ist, aber ich versuche, eine andere PHP-Anwendung in Drupal zu integrieren. Ich möchte wissen, ob der Benutzer derzeit auf der Site Drupal) angemeldet ist, obwohl die Anforderung an eine andere Stelle verschoben wird. Ich erhalte das Cookie aus einem Guzzle-Anforderungsobjekt Die Anwendung ist betroffen (aufgrund von Nginx-Proxy), der Ursprung ist derselbe und das Cookie wird erfolgreich übergeben.

Folgendes bekomme ich aus dem Guzzle-Anforderungsobjekt heraus:

array(1) {
  ["SSESSdbf18a05343cfb88719ee68ff6159a52"]=>
  string(43) "5eW8YPdDPjojAjuokObuD5R2L7cyOfffmBuVAdHzWwU"
}

Der obige Wert wird auch vom Browser gemeldet.

In meiner Tabelle sessions in der Datenbank gibt es jedoch keine ähnliche Sitzung, weder in der Spalte sid noch in der Spalte session.

Wie überprüft Drupal die Datenbank auf ein gültiges Sitzungscookie und wo sollte ich im Kern suchen, um dies zu kopieren?

5

Ich habe es herausgefunden, aber wenn jemand eine ausführlichere Antwort veröffentlicht, werde ich sie akzeptieren.

Drupal hat einen SessionHandler mit einer Lesefunktion:

public function read($sid) {
    $data = '';
    if (!empty($sid)) {
      // Read the session data from the database.
      $query = $this->connection
        ->queryRange('SELECT session FROM {sessions} WHERE sid = :sid', 0, 1, [':sid' => Crypt::hashBase64($sid)]);
      $data = (string) $query->fetchField();
    }
    return $data;
  }

Und wenn Sie bootstrap Drupal) oder ein externes Drush-Skript aufrufen, können Sie Folgendes tun:

$session_handler = \Drupal::getContainer()->get('session_handler.storage');
$logged_in = (bool) $session_handler->read($session);

So habe ich den Cookie aus dem Guzzle-Objekt entfernt:

$request->getCookies();
//var_dump($cookies);
foreach($cookies as $cookie){
  if(strpos($cookie, "SESS") == 0){
    $session = $cookie;
  }
}

Wenn Sie die UID tatsächlich möchten, müssen Sie das (Bool-) Casting nicht durchführen und das Ding de-blob, da es die rohen MySQL-Daten zurückgibt.

5