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


20

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 trong Drupal 7 như thế nào?

Câu trả lời:


4

Bởi vì phiên lưu drupal với 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 sao cho người dùng ẩn danh thì bạn nên drupal_session_start()thủ công.


2

Theo các tài liệu , đó 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.


cảm ơn. Có lẽ đây là một lỗi. nhưng cho đến khi tôi quyết định sử dụng nó session_api
Vitaly.batonov

@ Vitaly.batonov bạn có thể giải thích về cách bạn đã sử dụng session_api để giải quyết vấn đề của mình không?
lathomas64

2

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ể cần phải bắt đầu phiên bắt đầu với drupal_session_start để có thể sử dụng $_SESSION.


1
Có cách nào để nói với Drupal, LUÔN LUÔN bắt đầu một phiên cho người dùng ẩn danh?

1

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.


0

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.