Drupal 6の最後のプロジェクトでは、次のようなコードを使用してデータを保存しました。
$_SESSION['xxx'] = serialize($data);
Drupal 7では機能しません。
Drupal 7で匿名ユーザーのセッションデータを保存するにはどうすればよいですか?
Drupal 6の最後のプロジェクトでは、次のようなコードを使用してデータを保存しました。
$_SESSION['xxx'] = serialize($data);
Drupal 7では機能しません。
Drupal 7で匿名ユーザーのセッションデータを保存するにはどうすればよいですか?
回答:
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()
手動で行う必要があります。
これは、バグがあるか、セッションデータが読み取られないようにページが匿名ユーザー用にキャッシュされていることを意味します。最初のインスタンスでキャッシュ設定を確認します。
Drupal 7は、匿名ユーザーのセッションを自動的に開始しない場合があります。それらのセッションを使用するには、drupal_session_startで開始されたセッションがを使用できるようにする必要があります$_SESSION
。