Drupalのセッションについて

  •  
 
funada2020年12月3日 - 13:24 に投稿

タグ

DrupalのセッションAPIについて簡単に説明します。

セッションの保存場所

セッションはデータベースの「sessions」というテーブルに保存されています。

img

「sessions」テーブルには下記のカラムがあります

  • uid:セッション保存時にログインしていたユーザーのuid(匿名ユーザーの場合は0)
  • sid:セッションID(後述)
  • hostname:このセッションを最後に利用したIPアドレス
  • timestamp:タイムスタンプ
  • session:セッションの中身(keyとvalueのセットが保存されている)

セッションの保存方法

下記のようにセッションをセットします。

$session = \Drupal::request()->getSession();
$session->set($key, $value);

FormBaseクラスを継承したクラス内では次のように書くこともできます。

$session = $this->getRequest()->getSession();
$session->set($key, $value);

セットした$keyと$valueの組み合わせは、sessionsテーブルの「session」カラムに保存されます。

セッションの取り出し方法

セットしたときと同じ$keyを指定することで、そのとき保存した$valueの値を取り出せます。

$session = \Drupal::request()->getSession();
$value = $session->get($key);

セッションの削除方法

下記のようにセッションをリセットします。

$session = \Drupal::request()->getSession();
$session->remove($key);

ブラウザとの紐付き

ブラウザには下のような値が保存されています。

img

この「O8pl63RPSTwwcrObdXfTvgDRmscxj8ODOuOhFb-_yic」という値がセッションIDです。
上記と同じ値が、ハッシュ化されてデータベースにも保存されています。

以下のコードでハッシュ化することで、sessionsテーブルに「sid」として保存されている「Pgt_odi8lxY0WhCNfo58PElYS-FeYjBFEGdgR2f1vjA」という値になります。

$session_id = 'O8pl63RPSTwwcrObdXfTvgDRmscxj8ODOuOhFb-_yic';
$hashed = Drupal\Component\Utility\Crypt::hashBase64($session_id);

img

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。