it-swarm.com.de

Speichern anonymer Benutzerinformationen in einem Cookie

Ich möchte die Postleitzahl eines Benutzers speichern, wenn er sie für eine Proximity-Suche in einem Cookie verwendet. Ich weiß jedoch nicht, wo oder wie ich damit beginnen soll.

Wie speichere ich anonyme Benutzerinformationen in einem Cookie?

5
Adam S

Seit Drupal 7) gibt es zwei Funktionen zum Speichern von Daten in einem Cookie: ser_cookie_save () und ser_cookie_delete () . Trotz der Funktion Namen, die Funktionen funktionieren auch für anonyme Benutzer, da sie keine Informationen vom $user - Objekt oder Informationen erhalten, die sich auf die Benutzer-ID beziehen.

comment_form_submit () verwendet user_cookie_save() in den folgenden Codezeilen:

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

Wenn Sie eine Version von Drupal) verwenden, die diese Funktionen nicht definiert, können Sie ähnliche Funktionen in einem von Ihnen verwendeten Modul implementieren.

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

Beachten Sie, dass setrawcookie () nur in PHP 5. verfügbar ist. Wenn Sie ein Modul entwickeln, das mit PHP) verwendet werden kann = 4, dann sollten Sie setcookie () verwenden und den Code der Funktionen entsprechend ändern: Der Parameter muss als $values Deklariert werden (nicht array $values ) und der Aufruf von rawurlencode () muss entfernt werden, da die Cookies bereits URL-codiert von setcookie() sind.

10
kiamlaluno

Das Setzen von Cookies in Drupal unterscheidet sich nicht davon, wie Sie es mit jeder anderen PHP Site) tun würden:

setcookie ist die Funktion, die PHP dafür bereitstellt. Es gibt auch das $_COOKIE super globale Variable zu verwenden.

Codebeispiel:

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

Wenn Sie Drupal im Unterordner installiert haben, sodass Ihre Site-Stamm-URL die Form www.mydomain.com/mysite hat, sollten Sie beim Setzen des Cookies wahrscheinlich base_path () anstelle von '/' verwenden.

Funktionen in Kiamlalunos Antwort wären dann:

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