it-swarm.it

Memorizzazione di informazioni utente anonime in un cookie

Voglio memorizzare il codice postale di un utente, se lo usano per una ricerca di prossimità in un cookie. Tuttavia, non so dove o come iniziare a implementarlo.

Come posso conservare informazioni utente anonime su un cookie?

5
Adam S

Poiché Drupal 7, ci sono due funzioni per memorizzare i dati in un cookie: ser_cookie_save () , e ser_cookie_delete () . Nonostante la funzione nomi, le funzioni funzionano anche per utenti anonimi, poiché non ottengono informazioni dall'oggetto $user o da qualsiasi informazione correlata all'ID utente.

comment_form_submit () usa user_cookie_save() nelle seguenti righe di codice:

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

Se stai usando una versione di Drupal che non definisce tali funzioni, puoi implementare funzioni simili in un modulo che usi.

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

Tieni presente che setrawcookie () è disponibile solo in PHP 5. Se stai sviluppando un modulo che potrebbe essere usato con PHP = 4, quindi dovresti usare setcookie () e il codice delle funzioni dovrebbe essere modificato di conseguenza: il parametro deve essere dichiarato come $values (Non array $values ) e la chiamata a rawurlencode () deve essere rimossa poiché i cookie sono già codificati nell'URL da setcookie().

10
kiamlaluno

Impostare i cookie in Drupal non è diverso da come lo faresti con qualsiasi altro PHP:

setcookie è la funzione che PHP prevede questo. C'è anche il $_COOKIE variabile super globale da utilizzare.

Esempio di codice:

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

Se hai Drupal installato nella sottocartella in modo che l'URL di root del tuo sito abbia il modulo www.mydomain.com/mysite, probabilmente dovresti usare base_path () invece di '/' quando imposti il ​​cookie.

Le funzioni nella risposta di kiamlaluno sarebbero quindi:

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