it-swarm.asia

كيف أقوم بحفظ بيانات الجلسة للمستخدمين المجهولين؟

في مشروعي الأخير لـ 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];
}

لذا ، لحفظ متغير في الجلسة:

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

ولاسترجاع القيمة ، استخدم فقط:

$myVar = lists_session("xxx");

و كذلك كما يذكر MOLOT في بعض الأحيان لا يتم بدء الجلسة للمستخدمين المجهولين ، فيجب عليك drupal_session_start() يدويًا.

4
Yusef

لا يبدأ Drupal 7 أحيانًا جلسات تلقائيًا للمستخدمين المجهولين. لاستخدام الجلسات لهم ، قد تحتاج إلى فرض الجلسات التي بدأت بـ drupal_session_start لتتمكن من استخدام $_SESSION.

2
Mołot

وفقًا للمستندات ، هذا كل ما عليك القيام به.

مما يعني أن هناك خطأ ، أو أن صفحاتك يتم تخزينها مؤقتًا لمستخدمي anon بحيث لا يتم قراءة بيانات الجلسة. سوف أتحقق من إعدادات التخزين المؤقت الخاصة بك في المقام الأول.

2
Jeremy French

بعد حفظ البيانات باتباع:

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

تحتاج إلى وظيفة أخرى:

drupal_session_start();

نظرًا لأن جدول الجلسة يحتاج إلى سجل بالمعرف = 0 ، يمكنك إدراج سجل بالمعرف = 0 يدويًا.

1
Tony Mao

أنشئ مستخدمًا باستخدام uid = 0 في جدول المستخدمين لأن drupal دائمًا هذا المعرّف للمستخدمين المجهولين

0
sqzaman