web-dev-qa-db-ja.com

Drupal Cookieの値からセッションを確認する方法は?

申し訳ありませんが、それは奇妙なことですが、別のphpアプリケーションをDrupalと統合しようとしています。ユーザーが現在Drupalサイトにログインしているかどうか、他の場所にリクエストが送信されているかどうかを知りたい。GuzzleリクエストオブジェクトからCookieを取得している。アプリケーションは(Nginxプロキシのため)懸念され、Originは同じで、Cookieは正常に渡されます。

これが、Guzzleリクエストオブジェクトから取得するものです。

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

上記の値は、ブラウザが報告するものでもあります。

しかし、DBのsessionsテーブルには、sid列またはsession列のどちらにも、これに似たセッションはありません。

Drupal有効なセッションCookieがあるかどうかDBを確認するにはどうすればよいですか?これをコピーするためにコアのどこを見ればよいですか?

5

私はそれを理解しましたが、誰かがより詳細な回答を投稿した場合、それを受け入れます。

Drupalには、読み取り関数を備えたSessionHandlerがあります。

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;
  }

また、bootstrap Drupal、または外部Drushスクリプトを呼び出す場合は、次のようにすることができます。

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

これが、GuzzleオブジェクトからCookieを取得する方法です。

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

実際にUIDが必要な場合は、生のMySQLデータを返すため、(ブール)キャストを実行して、それをデブロブする必要はありません。

5