Score:0

เซสชันผู้ใช้ที่ไม่ระบุชื่อแบบถาวรพร้อมหัวขาด D9

ธง ck

กล่าวโดยย่อ: เซสชัน php ใหม่จะเริ่มต้นตามทุกคำขอที่ทำผ่าน nextjs ฉันต้องรักษาเซสชันผู้ใช้ที่ไม่ระบุชื่อให้คงอยู่

สำหรับผู้ใช้ที่ไม่ระบุชื่อของฉัน ฉันต้องการติดตามข้อมูลที่ส่งผ่าน nextjs ตอนแรกฉันพัฒนาแอปด้วย Drupal 8.9 และหลายเดือนต่อมาก็อัปเกรดเป็น 9.4-dev

ก่อนการอัปเกรดเป็น 9.4-dev ฉันแน่ใจว่าเซสชันทำงานได้อย่างถูกต้องในเบราว์เซอร์ต่างๆ และผู้ใช้ที่ไม่ระบุชื่อในเวลาเดียวกัน ฉันสามารถใช้แอป จัดเก็บและนำข้อมูลที่ไม่ซ้ำกันกลับมาใช้ใหม่ต่อผู้ใช้ที่ไม่ระบุชื่อ เป็นต้นน่าเศร้าที่การตรวจสอบนี้ทำได้ยาก การดาวน์เกรดเป็น 8.9 จะทำให้เกิดความเจ็บปวดเพิ่มเติม..

หลังจากการอัปเกรด จู่ๆ ผู้ใช้ที่ไม่ระบุตัวตนก็แชร์เซสชันเดียวกัน สิ่งนี้อาจเกี่ยวข้องกับ https://www.drupal.org/project/session_based_temp_store/issues/3257214 และ https://www.drupal.org/node/3006306 แต่ไม่แน่ใจ การใช้ session_based_temp_store:1.1 ส่งผลให้เกิดเซสชันที่ใช้ร่วมกัน และ session_based_temp_store:1.2 ส่งผลให้เกิดเซสชันที่ไม่คงอยู่

รหัสด้านล่างใช้ในการทำงาน:

 ถ้า ($this->currentUser->isAuthenticated()) {
  $user_preferences = unserialize($this->currentUser->get('field_preferences')->value);
  foreach ($values ​​เป็น $key => $value) {
    $user_preferences[$key] = $value;
  }
  $this->currentUser->set('field_preferences', serialize($user_preferences))->save();
}
อื่น {
  $session = \Drupal::service('session_based_temp_store')->get('mymodule_user');
  $user_preferences = $session->get('d_user');
  foreach ($values ​​เป็น $key => $value) {
    $user_preferences[$key] = $value;
  }

  $session->set('d_user', $user_preferences);
}

พยายามแก้ไขปัญหา ฉันพยายามใช้ tempstore.private ซึ่งส่งผลให้เกิดปัญหาเดียวกัน (เซสชันใหม่ทุกคำขอ)

หลังจากนี้ฉันพยายามใช้รหัสด้านล่าง ซึ่งส่งผลให้เกิดปัญหาเดียวกัน:

$_SESSION['my_module']['data'] = 'ข้อมูลของฉัน';
$request = $this->requestStack->getCurrentRequest();
$session = $request->getSession();

แม้แต่การทดสอบ var $_SESSION['my_module']['data'] ก็ "รีเซ็ต" ทุกครั้ง ดังนั้นมันไม่สำคัญว่าฉันจะลองใช้วิธีการจัดเก็บข้อมูลแบบใด ปัญหาคือเซสชันที่ไม่คงอยู่อย่างชัดเจน

ทรัพยากรที่เหลือทั้งหมดของฉันถูกเรียกใช้ด้วยคำขอ POST และตรวจสอบสิทธิ์ด้วย oauth2 ทุกอย่างทำงานได้ดีสำหรับผู้ใช้ที่ผ่านการรับรองความถูกต้อง ผู้ใช้ที่ไม่ระบุชื่อยังสามารถส่งคำขอได้สำเร็จ

ค้นหา Google ฉันไม่พบสิ่งที่มีประโยชน์เลย ซึ่งทำให้ฉันคิดว่าฉันขาดบางสิ่งที่ชัดเจนไป..

เป้าหมายหลักคือ: ผู้ใช้นิรนามต้องเก็บเซสชันถาวรไว้ใน drupal ที่ไม่มีส่วนหัว นอกจากนี้ เมื่อผู้ใช้ปิดเบราว์เซอร์และกลับมาในสัปดาห์ต่อมา เซสชันเดิมจะต้องยังคงอยู่..

ฉันไม่ต้องการเก็บข้อมูลที่ผู้ใช้ป้อนไว้ในส่วนหน้า

ปัญหาเป็นเรื่องตรรกะฉันคิดว่า ..: Drupal จะรู้ได้อย่างไรว่าใครเป็นผู้ส่งคำขอแบบไม่ระบุชื่อ ฉันควรมีคุกกี้ผู้ใช้ที่ไม่ระบุชื่อในส่วนหน้า เชื่อมต่อกับเซสชันผู้ใช้ที่ไม่ระบุชื่อในส่วนหลัง ส่งผ่านทุกคำขอหรือไม่

ใครช่วยชี้ฉันไปในทิศทางที่ถูกต้องได้ไหม ความช่วยเหลือใด ๆ ที่ชื่นชมมาก

Score:0
ธง cn

เป้าหมายหลักคือ: ผู้ใช้ที่ไม่ระบุชื่อต้องเก็บเซสชันถาวรไว้ใน Drupal หัวขาด นอกจากนี้เมื่อผู้ใช้ปิดเบราว์เซอร์และกลับมา หนึ่งสัปดาห์ต่อมา เซสชั่นเดิมจะต้องยังคงอยู่

นี่คือสิ่งที่คุกกี้มีไว้ ฉันไม่รู้เกี่ยวกับ nextjs แต่ในแอป React ที่ไม่มีหัวของฉัน ฉันเก็บการตั้งค่าผู้ใช้ที่ไม่ระบุชื่อทั้งหมดเป็นวัตถุ JSON ซึ่งฉันทิ้งลงในคุกกี้

การพึ่งพาการจัดการเซสชันของ Drupal เพียงอย่างเดียวเพื่อติดตามการตั้งค่าของผู้ใช้อย่างน่าเชื่อถือสำหรับผู้ใช้ที่ไม่ระบุตัวตน ฟังดูเหมือนสูตรสำเร็จสำหรับหายนะ

ฉันไม่ต้องการเก็บข้อมูลที่ผู้ใช้ป้อนไว้ในส่วนหน้า

คุณจะต้องเก็บคุกกี้ อย่างไรก็ตาม คุกกี้ที่เก็บการตั้งค่าของผู้ใช้โดยเฉพาะและไม่ได้ใช้เพื่อติดตามผู้ใช้จะไม่ละเมิด GDPR เป็นต้น

Maarten Hartman avatar
ck flag
ขอบคุณ ฉันจะไตร่ตรองเกี่ยวกับเรื่องนี้
4uk4 avatar
cn flag
*Relying solely on Drupal's session* ... the OP used a contrib module which sets a separate cookie on its own. The problems started when the module needed to be updated after the core update.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา