web-dev-qa-db-ja.com

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

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

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

Drupal 7では、機能しません。

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

20
vitaly.batonov

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

したがって、Sessionに変数を保存するには:

_lists_session("xxx", serialize($data));
_

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

_$myVar = lists_session("xxx");
_

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

4
Yusef

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

2
Mołot

ドキュメントによると 、それがあなたがする必要があるすべてです。

つまり、バグがあるか、ページが非ユーザーのためにキャッシュされているため、セッションデータが読み取られていません。最初のインスタンスでキャッシュ設定を確認します。

2
Jeremy French

次の方法でデータを保存した後:

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

別の機能が必要です:

drupal_session_start();

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

1
Tony Mao

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

0
sqzaman