申し訳ありませんが、それは奇妙なことですが、別のphpアプリケーションをDrupalと統合しようとしています。ユーザーが現在Drupalサイトにログインしているかどうか、他の場所にリクエストが送信されているかどうかを知りたい。GuzzleリクエストオブジェクトからCookieを取得している。アプリケーションは(Nginxプロキシのため)懸念され、Originは同じで、Cookieは正常に渡されます。
これが、Guzzleリクエストオブジェクトから取得するものです。
array(1) {
["SSESSdbf18a05343cfb88719ee68ff6159a52"]=>
string(43) "5eW8YPdDPjojAjuokObuD5R2L7cyOfffmBuVAdHzWwU"
}
上記の値は、ブラウザが報告するものでもあります。
しかし、DBのsessions
テーブルには、sid
列またはsession
列のどちらにも、これに似たセッションはありません。
Drupal有効なセッションCookieがあるかどうかDBを確認するにはどうすればよいですか?これをコピーするためにコアのどこを見ればよいですか?
私はそれを理解しましたが、誰かがより詳細な回答を投稿した場合、それを受け入れます。
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データを返すため、(ブール)キャストを実行して、それをデブロブする必要はありません。