กล่าวโดยย่อ: เซสชัน 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 จะรู้ได้อย่างไรว่าใครเป็นผู้ส่งคำขอแบบไม่ระบุชื่อ ฉันควรมีคุกกี้ผู้ใช้ที่ไม่ระบุชื่อในส่วนหน้า เชื่อมต่อกับเซสชันผู้ใช้ที่ไม่ระบุชื่อในส่วนหลัง ส่งผ่านทุกคำขอหรือไม่
ใครช่วยชี้ฉันไปในทิศทางที่ถูกต้องได้ไหม ความช่วยเหลือใด ๆ ที่ชื่นชมมาก