web-gelistirme-sc.com

Anonim kullanıcılar için oturum verilerini nasıl kaydederim?

Drupal 6) için son projemde, aşağıdakine benzer bir kod kullanarak verileri kaydettim:

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

Drupal 7 içinde işe yaramıyor.

Anonim kullanıcılar için oturum verilerini Drupal 7) içine nasıl kaydetmeliyim?

20
vitaly.batonov

Bunun nedeni drupal oturumu anahtarla kaydet, bu, şöyle bir şey yapmanız gerektiği anlamına gelir

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

Bunu deneyebilirsiniz.

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

Yani, bir değişkeni Oturumda kaydetmek için:

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

Ve değeri almak için şunu kullanın:

$myVar = lists_session("xxx");

ve MOLOT bazen anonim kullanıcılar için oturum açılmamış sözler daha sonra manuel olarak drupal_session_start() gerekir.

4
Yusef

Drupal 7 bazen anonim kullanıcılar için oturumları otomatik olarak başlatmaz. Onlar için oturumları kullanmak için, $_SESSION Kullanabilmek için drupal_session_start ile başlayan oturumu zorlamanız gerekebilir.

2
Mołot

Dokümanlara göre , tek yapmanız gereken bu.

Bu, bir hata olduğu veya sayfalarınızın anon kullanıcıları için önbelleğe alındığı anlamına gelir, böylece oturum verileri okunmaz. İlk olarak önbellekleme ayarlarınızı kontrol ederdim.

2
Jeremy French

Aşağıdakileri yaparak verileri kaydettikten sonra:

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

Başka bir fonksiyona ihtiyacınız var:

drupal_session_start();

Oturum tablosunun id = 0 olan bir kayda ihtiyacı olması nedeniyle, id = 0 olan bir kaydı el ile ekleyebilirsiniz.

1
Tony Mao

kullanıcılar tablosunda uid = 0 olan bir kullanıcı oluşturun çünkü drupal anonim kullanıcılar için her zaman bu uid'i kullanır

0
sqzaman