web-dev-qa-db-ja.com

匿名ユーザー情報をCookieに保存する

Cookieで近接検索に使用する場合、ユーザーの郵便番号を保存します。ただし、これをどこからどのように実装し始めるのかわかりません。

匿名ユーザーの情報をCookieに保存するにはどうすればよいですか?

5
Adam S

Drupal 7なので、Cookieにデータを保存する関数は ser_cookie_save()ser_cookie_delete() の2つがあります。名前の場合、これらの関数は_$user_オブジェクトまたはユーザーIDに関連する情報から情報を取得しないため、匿名ユーザーに対しても機能します。

comment_form_submit() は、次のコード行でuser_cookie_save()を使用します。

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

その関数を定義していないDrupalのバージョンを使用している場合は、使用するモジュールに同様の関数を実装できます。

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

setrawcookie() は、PHP 5.でのみ使用できます。PHP = 4、次に setcookie() を使用し、それに応じて関数のコードを変更する必要があります。パラメータは_$values_(_array $values_ではなく)として宣言する必要があります、 Cookieはすでにsetcookie()からURLエンコードされているため、 rawurlencode() の呼び出しを削除する必要があります。

10
kiamlaluno

DrupalでのCookieの設定は、他のPHPサイトでの方法と同じです。

setcookie は、PHPがこのために提供する関数です。$_COOKIE使用するスーパーグローバル変数。

コード例:

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

Drupalがサブフォルダーにインストールされており、サイトのルートURLの形式がwww.mydomain.com/mysiteである場合、Cookieを設定するときに「/」ではなくbase_path()を使用する必要があります。

Kiamlalunoの回答の関数は次のようになります。

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