it-swarm.asia

تخزين معلومات المستخدم المجهولة في ملف تعريف الارتباط

أريد تخزين الرمز البريدي لمستخدم ، إذا استخدمه للبحث عن قرب في ملف تعريف الارتباط. ومع ذلك ، لا أعرف من أين أو كيف أبدأ في تنفيذ ذلك.

كيف يمكنني تخزين معلومات المستخدم المجهولة في ملف تعريف الارتباط؟

5
Adam S

نظرًا لأن Drupal 7 ، هناك وظيفتان لتخزين البيانات في ملف تعريف الارتباط: ser_cookie_save () و ser_cookie_delete () . على الرغم من الوظيفة الأسماء ، تعمل الدوال أيضًا للمستخدمين المجهولين ، نظرًا لأنهم لا يحصلون على معلومات من كائن $user أو أي معلومات تتعلق بمعرف المستخدم.

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 ) ، والدعوة إلى rawurlencode () يجب إزالتها لأن ملفات تعريف الارتباط هي بالفعل عنوان URL مشفر من setcookie().

10
kiamlaluno

إعداد ملفات تعريف الارتباط في Drupal لا يختلف عن كيفية القيام بذلك مع أي موقع آخر 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 ، فمن المحتمل أن تستخدم 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