it-swarm-vi.com

Làm cách nào để lưu dữ liệu phiên cho người dùng ẩn danh?

Trong dự án cuối cùng của tôi cho Drupal 6, tôi đã lưu dữ liệu bằng cách sử dụng mã tương tự như sau:

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

Trong Drupal 7, nó không hoạt động.

Tôi nên lưu dữ liệu phiên cho người dùng ẩn danh như thế nào, trong Drupal 7?

20
vitaly.batonov

Bởi vì drupal lưu phiên bằng khóa, điều này có nghĩa là bạn nên làm một cái gì đó như

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

Bạn có thể thử điều này.

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

Vì vậy, để lưu một biến trong Phiên:

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

Và để lấy giá trị, chỉ cần sử dụng:

$myVar = lists_session("xxx");

và cũng như MOLOT đề cập đôi khi phiên không được gắn dấu sao cho người dùng ẩn danh thì bạn nên drupal_session_start() theo cách thủ công.

4
Yusef

Drupal 7 đôi khi không tự động bắt đầu phiên cho người dùng ẩn danh. Để sử dụng phiên cho họ, bạn có thể bắt buộc phiên bắt đầu bằng drupal_session_start để có thể sử dụng $_SESSION.

2
Mołot

Theo các tài liệ , đó là tất cả những gì bạn cần làm.

Điều đó có nghĩa là có lỗi hoặc các trang của bạn đang được lưu trong bộ nhớ cache cho người dùng anon để dữ liệu phiên không được đọc. Tôi sẽ kiểm tra cài đặt bộ nhớ đệm của bạn trong trường hợp đầu tiên.

2
Jeremy French

Sau khi bạn lưu dữ liệu bằng cách làm theo:

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

Cần một chức năng khác:

drupal_session_start();

Do bảng Phiên cần bản ghi có id = 0, bạn có thể chèn bản ghi với id = 0 theo cách thủ công.

1
Tony Mao

tạo người dùng với uid = 0 trong bảng người dùng vì drupal luôn sử dụng uid đó cho người dùng ẩn danh

0
sqzaman