it-swarm-vi.com

Lưu trữ thông tin người dùng ẩn danh trong cookie

Tôi muốn lưu trữ mã Zip của người dùng, nếu họ sử dụng nó cho tìm kiếm gần trong cookie. Tuy nhiên, tôi không biết bắt đầu từ đâu và như thế nào để thực hiện điều này.

Làm cách nào để lưu trữ thông tin người dùng ẩn danh trên cookie?

5
Adam S

Vì Drupal 7, có hai chức năng lưu trữ dữ liệu trong cookie: ser_cookie_save ()ser_cookie_delete () . Mặc dù chức năng này tên, các chức năng cũng hoạt động cho người dùng ẩn danh, vì họ không nhận được thông tin từ đối tượng $user hoặc bất kỳ thông tin nào có liên quan đến ID người dùng.

comment_form_submit () sử dụng user_cookie_save() trong các dòng mã sau:

if (user_is_anonymous()) {
  user_cookie_save(array_intersect_key($form_state['values'], array_flip(array('name', 'mail', 'homepage'))));
}

Nếu bạn đang sử dụng phiên bản Drupal không xác định các chức năng đó, bạn có thể triển khai các chức năng tương tự trong mô-đun bạn sử dụng.

function mymodule_cookie_save(array $values) {
  foreach ($values as $field => $value) {
    // Set cookie for 365 days.
    setrawcookie('Drupal.visitor.' . $field, rawurlencode($value), REQUEST_TIME + 31536000, '/');
  }
}

function mymodule_cookie_delete($cookie_name) {
  setrawcookie('Drupal.visitor.' . $cookie_name, '', REQUEST_TIME - 3600, '/');
}

Hãy nhớ rằng setrawcookie () chỉ khả dụng trong PHP 5. Nếu bạn đang phát triển một mô-đun có thể được sử dụng với PHP = 4, sau đó bạn nên sử dụng setcookie () và mã của các hàm phải được thay đổi theo: tham số cần được khai báo là $values (Không phải array $values ) và lệnh gọi tới rawurlencode () cần được xóa vì cookie đã được mã hóa URL từ setcookie().

10
kiamlaluno

Đặt cookie trong Drupal không khác với cách bạn sẽ làm với bất kỳ cái gì khác PHP:

setcookie là hàm mà PHP cung cấp cho việc này. Ngoài ra còn có $_COOKIE biến siêu toàn cầu để sử dụng.

Mã ví dụ:

$cookieval = 'my cookie value';
if ($_COOKIE['my_cookie_key'] != $cookie_val) {
 setcookie('my_cookie_key', $cookie_val);
}
3
googletorp

Nếu bạn có Drupal được cài đặt trong thư mục con để URL gốc trang web của bạn có dạng www.mydomain.com/mysite, có lẽ bạn nên sử dụng base_path () thay vì '/' khi đặt cookie.

Các chức năng trong câu trả lời của kiamlaluno sẽ là:

function mymodule_cookie_save(array $values) {
  foreach ($values as $field => $value) {
  // Set cookie for 365 days.
  setrawcookie('Drupal.visitor.' . $field, rawurlencode($value), REQUEST_TIME + 31536000, base_path());
  }
}

function mymodule_cookie_delete($cookie_name) {
  setrawcookie('Drupal.visitor.' . $cookie_name, '', REQUEST_TIME - 3600, base_path());
}
0
jiv-e