it-swarm-id.com

Menyimpan informasi pengguna anonim dalam cookie

Saya ingin menyimpan kode Zip pengguna, jika mereka menggunakannya untuk pencarian kedekatan dalam cookie. Namun, saya tidak tahu di mana atau bagaimana memulai untuk mengimplementasikan ini.

Bagaimana cara menyimpan informasi pengguna anonim di cookie?

5
Adam S

Sejak Drupal 7, ada dua fungsi untuk menyimpan data dalam cookie: ser_cookie_save () , dan ser_cookie_delete () . Meskipun memiliki fungsi nama, fungsi berfungsi juga untuk pengguna anonim, karena mereka tidak mendapatkan informasi dari objek $user atau informasi apa pun yang terkait dengan ID pengguna.

comment_form_submit () menggunakan user_cookie_save() dalam baris kode berikut:

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

Jika Anda menggunakan versi Drupal yang tidak mendefinisikan fungsi-fungsi itu, Anda dapat mengimplementasikan fungsi yang serupa dalam modul yang Anda gunakan.

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, '/');
}

Perlu diingat bahwa setrawcookie () hanya tersedia dalam PHP 5. Jika Anda mengembangkan modul yang dapat digunakan dengan PHP = 4, maka Anda harus menggunakan setcookie () , dan kode fungsi harus diubah sesuai: parameter perlu dinyatakan sebagai $values (Bukan array $values ), dan panggilan ke rawurlencode () perlu dihapus karena cookie sudah URL dikodekan dari setcookie().

10
kiamlaluno

Mengatur cookie di Drupal tidak berbeda dengan bagaimana Anda akan melakukannya dengan yang lain PHP situs:

setcookie adalah fungsi yang PHP menyediakan untuk ini. Ada juga $_COOKIE variabel super global untuk digunakan.

Contoh kode:

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

Jika Anda memiliki Drupal diinstal pada subfolder sehingga URL root situs Anda memiliki bentuk www.mydomain.com/mysite, Anda mungkin harus menggunakan base_path () alih-alih '/' saat mengatur cookie.

Fungsi dalam jawaban kiamlaluno adalah:

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