คุกกี้ไม่ทำงานกับโดเมนย่อย


11

example.comเรามีเว็บไซต์หลักที่ เข้าสู่ระบบexample.com/adminทำงานได้ดีที่นั่น

แต่ในเว็บไซต์ทดสอบที่test.example.com/adminฉันไม่สามารถเข้าสู่ระบบโดยไม่ต้องลบexample.comคุกกี้ทั้งหมดก่อน จากนั้นฉันก็สามารถเข้าสู่ระบบได้ แต่ทันทีที่ฉันเข้าสู่example.com/adminคลิกถัดไปของฉันบนเซิร์ฟเวอร์ทดสอบเตะฉันกลับไปที่หน้าเข้าสู่ระบบ

ฉันไม่รู้ว่าสิ่งนี้มีผลต่อการเข้าสู่ระบบของลูกค้าหรือไม่

มีการกำหนดค่าบางอย่างในไซต์หลักหรือไซต์ทดสอบที่จะแก้ปัญหานี้หรือไม่

คำตอบ:


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

ในexample.comร้านค้าให้ตั้งค่าต่อไปนี้:

  1. ตั้งค่าโดเมนคุกกี้เป็น example.com (โดยปกติแล้วการตั้งค่านี้จะเป็น. example.com โดยมีจุดอยู่ด้านหน้าคุณอาจลองโดยไม่ใช้ในกรณีนี้)

ในtest.example.comร้านค้าให้ตั้งค่าต่อไปนี้:

  1. ตั้งค่าโดเมนคุกกี้เป็น. test.example.com บนสภาพแวดล้อมการทดสอบ ("." หน้าโดเมนควรจะถูกปรับที่นี่)

2
เพิ่งทราบขั้นตอนที่ 3 เกี่ยวกับ.โดเมนที่มีความสำคัญ!
B00MER

สวัสดีแอนนา ควรตั้งค่าโดเมนคุกกี้เป็น ".example.com" ในexample.comผู้test.example.comดูแลระบบผู้ดูแลระบบหรือทั้งสองอย่าง
Buttle Butkus

ฉันจะตั้งเป็นค่าเริ่มต้น (ซึ่งเป็นผู้ดูแลระบบ example.com ของคุณฉันเดา) ดังนั้นนี่หมายถึง. example.com สำหรับขอบเขตทั้งหมด
Anna Völkl

@ AnnaVölklฉันไม่แน่ใจที่นี่ คุณเข้าใจไหมว่าฉันมีการติดตั้งวีโอไอพีสองชุดที่แยกจากกันบนเครื่องที่แตกต่างกันสองเครื่องใช่ไหม? หนึ่งในการใช้งานอื่น ๆexample.com test.example.comพวกเขาทั้งคู่มีผู้ดูแลของตัวเอง แต่คุณกำลังบอกให้ฉันตั้งโดเมนสำหรับผู้ดูแลระบบคนใดคนหนึ่ง คุณกำลังบอกว่าฉันควรปล่อยให้คนอื่นว่างเปล่า?
Buttle Butkus

อ่าฉันเข้าใจแล้ว อันที่จริงฉันไม่ทราบว่าสิ่งเหล่านี้คือการติดตั้งแยก 2 ร้านค้าหลักทำงานโดยมีหรือไม่มี www-Domain หรือไม่ คุณสามารถตั้งค่าโดเมนคุกกี้ในการทดสอบเป็นtest.example.comและที่ร้านค้าหลักwww.example.comเพื่อหลีกเลี่ยงการซ้อนทับคุกกี้
Anna Völkl

9

แอนนาทำคะแนนได้ดีและคำตอบของเธอจะใช้ได้กับคนจำนวนมาก แต่ไม่ใช่สำหรับฉันดังนั้นฉันจึงโพสต์คำตอบของฉันเอง บางทีปัญหาของฉันอาจเป็นพื้นฐานมากกว่าที่เธอพูด

วิธีการแก้ปัญหาของฉันคือการเปลี่ยนโดเมนเว็บไซต์ของฉันจากไปexample.com www.example.comในความเป็นจริงการวิจัยของฉันบนอินเทอร์เน็ตแสดงให้เห็นว่าเว็บไซต์เหตุผลเช่น Amazon, Google, Ebay และทุกปลายทางเว็บที่สำคัญอื่น ๆ ใช้wwwคำนำหน้าอาจเป็นส่วนใหญ่เนื่องจากวิธีการทำงานของคุกกี้ อาจจะไม่.

วิธีการเริ่มต้นที่คุกกี้ทำงานคือใช้กับโดเมนย่อยทั้งหมด ดังนั้นถ้าexample.comคุณส่งคุกกี้แล้วคุณเยี่ยมชมmail.example.com, smile.example.comหรือdevsite.example.comแล้วเบราว์เซอร์ของคุณจะส่งคุกกี้ที่เว็บไซต์เหล่านั้นและเว็บไซต์เหล่านั้นจะพยายามที่จะใช้คุกกี้ แต่พวกเขาจะไม่สามารถค้นหาเซสชันของคุณได้เว้นแต่พวกเขาจะใช้โฟลเดอร์เซสชันทั่วไป และถึงแม้ว่าคุณอาจมีปัญหาเนื่องจากการกำหนดค่าฐานข้อมูลที่แตกต่างกันโครงสร้างแอปพลิเคชันที่แตกต่างกัน ฯลฯ

ทำการเปลี่ยนแปลงที่เกี่ยวข้องกับการสร้างการเปลี่ยนเส้นทาง 301 ในไฟล์ root htaccess ของฉันการเปลี่ยน URL ที่ปลอดภัย / ไม่ปลอดภัยในcore_config_dataตารางฐานข้อมูลmagento การเปลี่ยนไซต์ServerNameใน Apache VirtualHostsและการตั้งค่า DNS / nameserver แต่มันก็คุ้มค่าดี

เมื่อสร้างไซต์หลักของฉันwww.example.comตอนนี้คุกกี้จะใช้ได้กับโดเมนย่อยเท่านั้นเช่นmail.www.example.com(และเราไม่มีโดเมนย่อยดังกล่าว) เบราว์เซอร์ไคลเอ็นต์ที่ไม่ได้รับwww.example.comคุกกี้จะไม่ส่งไปให้devsite.example.comและปัญหาจะได้รับการแก้ไข นอกจากนี้ยังเป็นเรื่องดีที่มีwwwชื่อโดเมนของเราอยู่ด้านหน้า


1
ฉันหวังว่าฉันจะสามารถโหวตขึ้นหลายครั้งสำหรับคำตอบนี้ ฉันกำลังมองหาวิธีแก้ปัญหาเป็นเวลาหลายเดือนและทุกคนพูดถึง Cookie Path และ Cookie Domain แต่จะไม่แก้ไขปัญหาหากคุณไม่ใช้ www ขอขอบคุณ!!
Bruno Monteiro

เรามี www อยู่ในโดเมนคุกกี้แล้ว แต่ก็ยังล้มเหลว ...
ดำ

ยังคงล้มเหลวอะไร
Buttle Butkus

3

คุณสามารถเปลี่ยนชื่อคุกกี้ adminhtml สำหรับโดเมนย่อยได้

app/code/core/Mage/Core/Controller/Varien/Action.phpสองการเปลี่ยนแปลงในแฟ้ม

ในฟังก์ชั่นpreDispatchการเปลี่ยนสาย

/** @var $session Mage_Core_Model_Session */
$session = Mage::getSingleton('core/session', array('name' => $this->_sessionNamespace))->start();

ถึง

$namespace = $this->_sessionNamespace.($_SERVER['SERVER_NAME']=='subdomain.example.com'?'_subdomain':'');
/** @var $session Mage_Core_Model_Session */
$session = Mage::getSingleton('core/session', array('name' => $namespace))->start();

ในการsetRedirectWithCookieCheckเปลี่ยนฟังก์ชั่น

/** @var $session Mage_Core_Model_Session */
session = Mage::getSingleton('core/session', array('name' => $this->_sessionNamespace));

ถึง

$namespace = $this->_sessionNamespace.($_SERVER['SERVER_NAME']=='subdomain.example.com'?'_subdomain':'');
/** @var $session Mage_Core_Model_Session */
$session = Mage::getSingleton('core/session', array('name' => $namespace));

และหลังจากนั้นก็ค้นหาข้อความ

Mage::getSingleton('core/session', array('name' => 'adminhtml'));

ในไฟล์ทั้งหมดและแทนที่ด้วย

Mage::getSingleton('core/session', array('name' => 'adminhtml'.($_SERVER['SERVER_NAME']=='subdomain.example.com'?'_subdomain':'')));

หากพบเหตุการณ์ใด ๆ


1
คุณสามารถอธิบายด้วยวิธีที่รหัสของคุณเปลี่ยนแปลงการโต้ตอบระหว่างไคลเอ็นต์และเซิร์ฟเวอร์คุกกี้เพื่อแยกเซสชันได้อย่างไร
Buttle Butkus

@ButtleButkus ปัญหาคือว่าคุกกี้ชุด example.com/admin มีชื่อโดเมนadminhtml .example.comเมื่อคุณพยายามที่จะอนุญาตที่ test.example.com/admin ก็พยายามที่จะทำอะไรกับคุกกี้สำหรับadminhtml .test.example.comปัญหาต่างกันในการตั้งค่าวีโอไอพี ปัญหาหลักคือคุณไม่สามารถแก้ไขคุกกี้ของโดเมนหลักจากโดเมนย่อย รหัสด้านบนทำให้ Magento สร้างคุกกี้adminhtmlสำหรับ example.com และคุกกี้adminhtml_subdomainสำหรับ subdomain.example.com ดังนั้นพวกเขาจะไม่ผสมกัน แต่อย่างใด เปลี่ยนsubdomainเป็นสิ่งที่ถูกต้องที่คุณใช้
maxvgi

นั่นเป็นสิ่งที่ดีสำหรับผู้ดูแลระบบด้าน แต่ส่วนหน้าควรเปลี่ยนชื่อคุกกี้ในโซลูชันประเภทนี้ใช่ไหม
Buttle Butkus

@ButtleButkus คุณพูดถูก ขออภัยฉันไม่ได้เขียนสิ่งนี้เพราะฉันไม่มีปัญหาแบบนี้
maxvgi

ไม่เป็นไรยังคงมีประโยชน์สำหรับบางคน
Buttle Butkus

0

หากคุณยังไม่สามารถลงชื่อเข้าใช้ส่วนหน้าของคุณ (ไม่สามารถสร้างเซสชันลูกค้า) เนื่องจากปัญหาคุกกี้โปรดแทนที่ไฟล์หลักที่เกี่ยวข้อง

ก่อน 1.8.x รุ่น - แอพ / รหัส / แกน / ผู้วิเศษ / ลูกค้า / รุ่น / session.php

และ

จาก 1.8.x แอปเวอร์ชัน / รหัส / คอร์ / ผู้วิเศษ / คอร์ / โมเดล / เซสชัน / Abstract.php

ใส่เครื่องหมายคอมเม้นต์ในบรรทัดนี้ สิ่งนี้ได้แก้ไขปัญหาเกี่ยวกับการลงชื่อเข้าใช้ของลูกค้าที่ส่วนหน้าของที่เก็บรุ่น 1.8.x ล่วงหน้า

/magento//a/34057/695

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.