匿名ユーザーのセッションデータを保存するにはどうすればよいですか?


20

Drupal 6の最後のプロジェクトでは、次のようなコードを使用してデータを保存しました。

$_SESSION['xxx'] = serialize($data);

Drupal 7では機能しません。

Drupal 7で匿名ユーザーのセッションデータを保存するにはどうすればよいですか?

回答:


4

drupalはキーを使用してセッションを保存するため、これは次のようなことをする必要があることを意味します

  $_SESSION['yourkey']['xxx'] = serialize($data);

これを試すことができます。

function lists_session($key, $value = NULL) {
  global $user;

  static $storage;

  // If the user is anonymous, force a session start.
  if(!user->uid) {
    drupal_session_start();
  }

  if ($value) {
    $storage[$key] = $value;
    $_SESSION['lists'][$key] = $value;   // I use 'lists' in case some other module uses 'type' in $_SESSION
  }
  else if (empty($storage[$key]) && isset($_SESSION['lists'][$key])) {
    $storage[$key] = $_SESSION['lists'][$key];
  }
  return $storage[$key];
}

したがって、セッションで変数を保存するには:

lists_session("xxx", serialize($data));

値を取得するには、次を使用します。

$myVar = lists_session("xxx");

また、MOLOTが言及しているように、匿名ユーザー向けにセッションが開始されていない場合があるため、drupal_session_start()手動で行う必要があります。


2

docsよると、あなたがする必要があるのはそれだけです。

これは、バグがあるか、セッションデータが読み取られないようにページが匿名ユーザー用にキャッシュされていることを意味します。最初のインスタンスでキャッシュ設定を確認します。


ありがとう。おそらくこれはバグです。しかし、それを使用することを決定するまで、session_api
vitaly.batonov

@ vitaly.batonovでは、session_apiを使用して問題を解決した方法について詳しく説明できますか?
lathomas64

2

Drupal 7は、匿名ユーザーのセッションを自動的に開始しない場合があります。それらのセッションを使用するには、drupal_session_startで開始されたセッションがを使用できるようにする必要があります$_SESSION


1
Drupalに、常に匿名ユーザーのセッションを開始するよう指示する方法はありますか?

1

以下に従ってデータを保存した後:

$_SESSION['xxx'] = serialize($data);

別の機能が必要:

drupal_session_start();

Sessionテーブルにはid = 0のレコードが必要なので、id = 0のレコードを手動で挿入できます。


0

drupalは匿名ユーザーに対して常にそのuidを使用するため、usersテーブルにuid = 0のユーザーを作成します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.