it-swarm.com.de

Was ist der richtige Weg, um einen Sitzungsstart zu erzwingen?

Ich portiere derzeit das SimpleFBConnect-Modul nach Drupal 8. Dieses Modul verwendet Facebook PHP SDK, das erwartet, dass wir eine Sitzung eingerichtet haben, bevor der Benutzer zu Facebook umgeleitet wird zur Authentifizierung.

Beim Lesen der SessionManager-API ging ich davon aus, dass SessionManager :: start die Sitzung starten würde. Dies scheint jedoch nicht der Fall zu sein. Das Gleiche gilt für SessionManager :: save (Beschreibung besagt, dass diese Funktion "das Speichern und Schließen der Sitzung erzwingen wird").

Die einzige Möglichkeit, einen Sitzungsstart zu erzwingen, bestand darin, SessionManager::regenerate.

Ist dies der richtige Weg, um den Sitzungsstart in Drupal 8) zu erzwingen?

Debug-Code, der anzeigt, dass SessionManager :: start die Sitzung nicht startet.

class TestController extends ControllerBase {
  public function test() {
    $session_manager = Drupal::service('session_manager');
    $session_manager->start();

    if ($session_manager->isStarted()) {
      $msg = 'Sesssion started';
    }
    else {
      $msg = 'Sesssion not started';
    }

    return array(
      '#markup' => $msg
    );
  }
}
6
Markus Sipilä

Drupal startet eine Sitzung nur, wenn am Ende der Anfrage das $_SESSION super global enthält alle Daten. Leere Sitzungen werden aktiv zerstört. Dies dient dazu, die Cache-Trefferquoten zu maximieren, wenn eine Site hinter einem Reverse-Proxy-Server (z. B. Varnish) betrieben wird.

Wie bereits von @Berdir erwähnt, besteht der richtige Weg, einen Sitzungsstart in Drupal) auszulösen, darin, etwas darin zu speichern. Das Facebook SDK versucht jedoch, seine Benutzer vor Datenverlust aufgrund von zu schützen Unsachgemäße Sitzungsverwaltung. Gemäß dem Quellcode kann diese Funktion über die Methode FacebookRedirectLoginHelper :: disableSessionStatusCheck () deaktiviert werden. Verwenden Sie diese Option, anstatt zu versuchen, einen Sitzungsstart zu erzwingen.

2
znerol

Okay, habe die Antwort aus diesem Änderungsdatensatz gefunden: https://www.drupal.org/node/2228871

Die Sitzung kann folgendermaßen erzwungen werden:

// Force session start if we don't already have a session.
$session = \Drupal::service('session');
if (!$session->isStarted()) {
  $session->migrate();
}
5
Markus Sipilä

Ich denke, die einzige Möglichkeit, eine Sitzung zu erzwingen, besteht darin, etwas darin zu speichern.

Es macht keinen Sinn, es manuell zu starten, da Drupal eine Sitzung ohne Sitzungsdaten nicht speichert, AFAIK.

Versuchen Sie also, einfach einen Dummy-Schlüssel in $ _SESSION einzufügen.

1
Berdir