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];
}
_
したがって、Sessionに変数を保存するには:
_lists_session("xxx", serialize($data));
_
値を取得するには、次のように使用します。
_$myVar = lists_session("xxx");
_
mOLOTが言及しているように、匿名ユーザーがセッションを開始していない場合もあるため、手動でdrupal_session_start()
を実行する必要があります。
Drupal 7は匿名ユーザーのセッションを自動的に開始しない場合があります。それらのセッションを使用するには、_ drupal_session_start で開始されたセッションに$_SESSION
を使用できるようにする必要がある場合があります。
ドキュメントによると 、それがあなたがする必要があるすべてです。
つまり、バグがあるか、ページが非ユーザーのためにキャッシュされているため、セッションデータが読み取られていません。最初のインスタンスでキャッシュ設定を確認します。
次の方法でデータを保存した後:
$_SESSION['xxx'] = serialize($data);
別の機能が必要です:
drupal_session_start();
Sessionテーブルにはid = 0のレコードが必要なため、id = 0のレコードを手動で挿入できます。
drupalは常に匿名ユーザーに対してそのuidを使用するため、usersテーブルにuid = 0のユーザーを作成します