Cookies không hoạt động với tên miền phụ


11

Chúng tôi có một trang web chính tại example.com. Đăng nhập vào example.com/adminhoạt động tốt ở đó.

Nhưng trên một trang web thử nghiệm tại test.example.com/admintôi không thể đăng nhập vào quản trị viên mà không xóa tất cả example.comcookie. Sau đó tôi có thể đăng nhập, nhưng ngay sau khi tôi đăng nhập vào example.com/adminlần nhấp tiếp theo của mình trên máy chủ thử nghiệm sẽ đưa tôi trở lại trang đăng nhập.

Tôi không biết nếu điều này ảnh hưởng đến đăng nhập của khách hàng.

Có một số cấu hình trong trang web chính hoặc trang web thử nghiệm sẽ giải quyết vấn đề này?

Câu trả lời:


14
  1. Trên menu Quản trị, chọn Hệ thống> Cấu hình. Sau đó trong bảng điều khiển bên trái, bên dưới Chung, bấm Web.
  2. Mở rộng phần Quản lý cookie phiên

Trong example.comcửa hàng, đặt như sau:

  1. Đặt Tên miền Cookie thành example.com (thông thường cài đặt này sẽ là .example.com với một dấu chấm ở phía trước, bạn có thể thử nó mà không có trong trường hợp này).

Trong test.example.comcửa hàng, đặt như sau:

  1. Đặt tên miền Cookie thành .test.example.com trên môi trường thử nghiệm. ("." ở phía trước tên miền sẽ ổn ở đây)

2
Chỉ cần một lưu ý, Bước 3 về .phía trước tên miền, rất quan trọng!
B00mer

Xin chào Anna. Tên miền cookie nên được đặt thành ".example.com" trong example.comquản trị viên, test.example.comquản trị viên hoặc cả hai?
Butussy Butkus

Tôi đoán nó là cấu hình mặc định (tôi đoán là admin.com của bạn). Vì vậy, điều này có nghĩa là .example.com cho tất cả các phạm vi.
Anna Völkl

@ AnnaVölkl Tôi không chắc ở đây. Bạn hiểu tôi có hai cài đặt magento hoàn toàn riêng biệt trên hai máy khác nhau, phải không? Một cái dùng example.com, cái kia test.example.com. Cả hai đều có quản trị viên riêng của họ . Nhưng bạn chỉ bảo tôi đặt tên miền cho một trong những quản trị viên. Bạn đang nói tôi nên để trống khác?
Butussy Butkus

Ah tôi thấy. Quả thực tôi đã không biết đây là 2 cài đặt riêng biệt. Cửa hàng chính có chạy hay không có www-Domain? Bạn có thể đặt Tên miền Cookie trong Thử nghiệm thành test.example.comvà trên cửa hàng chính www.example.comđể tránh trùng lặp cookie.
Anna Völkl

9

Anna đưa ra một số điểm tốt và câu trả lời của cô ấy sẽ có hiệu quả với nhiều người, nhưng không phải cho tôi, vì vậy tôi đang đăng câu trả lời của riêng mình. Có lẽ vấn đề của tôi cơ bản hơn nhiều so với vấn đề mà cô ấy giải quyết.

Giải pháp của tôi là thay đổi tên miền của trang web của tôi từ example.comsang www.example.com. Trên thực tế, nghiên cứu của tôi trên internet cho thấy rằng lý do các trang web như Amazon, Google, Ebay và mọi điểm đến web lớn khác sử dụng wwwtiền tố có thể phần lớn là do cách thức hoạt động của cookie. Có thể không.

Cách mặc định mà cookie hoạt động là nó áp dụng cho tất cả các tên miền phụ. Vì vậy, nếu example.comgửi cho bạn một cookie, sau đó bạn truy cập mail.example.com, smile.example.comhoặc devsite.example.com, sau đó trình duyệt của bạn sẽ gửi cookie đó đến các trang web đó và các trang web đó sẽ cố gắng sử dụng cookie. Nhưng họ sẽ không thể tìm thấy phiên của bạn trừ khi tất cả họ đều sử dụng thư mục phiên chung. Và thậm chí sau đó, bạn có thể gặp sự cố do cấu hình cơ sở dữ liệu khác nhau, cấu trúc ứng dụng khác nhau, v.v.

Thực hiện thay đổi liên quan đến việc tạo 301 chuyển hướng trong tệp htaccess gốc của tôi, thay đổi các url an toàn / không an toàn trong core_config_databảng cơ sở dữ liệu magento , thay đổi trang web ServerNametrong Apache VirtualHostsvà cập nhật cài đặt DNS / máy chủ tên. Nhưng nó cũng có giá trị nó.

Bằng cách tạo trang web chính của tôi www.example.com, cookie của nó bây giờ sẽ chỉ áp dụng cho các tên miền phụ, chẳng hạn như mail.www.example.com(và chúng tôi không có bất kỳ tên miền phụ nào như vậy). Các trình duyệt máy khách nhận www.example.comcookie không gửi nó đến devsite.example.comvà vấn đề được giải quyết. Thêm vào đó, thật tuyệt khi có một wwwtên miền trước tên miền của chúng tôi.


1
Tôi ước tôi có thể đưa ra nhiều Phiếu bầu cho câu trả lời này. Tôi đang tìm kiếm một giải pháp trong nhiều tháng và mọi người cứ nói về Đường dẫn cookie và Tên miền Cookie, nhưng điều đó sẽ không khắc phục được vấn đề nếu bạn không sử dụng www. Cảm ơn bạn!!
Bruno Monteiro

Chúng tôi đã có www trong miền cookie, nhưng nó vẫn thất bại ...
Đen

Điều gì vẫn thất bại?
Butussy Butkus

3

Bạn chỉ có thể thay đổi tên cookie adminhtml cho tên miền phụ.

Hai thay đổi trong tập tin app/code/core/Mage/Core/Controller/Varien/Action.php.

Trong preDispatchdòng thay đổi chức năng

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

đến

$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();

setRedirectWithCookieCheckThay đổi chức năng

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

đến

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

Và sau đó tìm kiếm văn bản

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

trong tất cả các tệp và thay thế nó bằng

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

nếu bất kỳ sự cố sẽ được tìm thấy.


1
Bạn có thể giải thích bằng lời làm thế nào mã của bạn thay đổi tương tác cookie của máy khách và máy chủ để cô lập các phiên không?
Butussy Butkus

@BriptButkus vấn đề là example.com/admin đặt cookie với tên adminhtmlcho tên miền .example.com. Khi bạn cố gắng để ủy quyền tại test.example.com/admin, nó cố gắng làm điều gì đó với cookie adminhtmlcho .test.example.com. Các vấn đề khác nhau trên cài đặt Magento. Vấn đề chính là bạn không thể sửa đổi cookie của tên miền chính từ tên miền phụ. Đoạn mã trên khiến Magento tạo cookie adminhtmlcho example.com và cookie adminhtml_subdomaincho tên miền phụ.example.com, vì vậy chúng sẽ không trộn lẫn theo bất kỳ cách nào. Thay đổi subdomainthành chính xác bạn sử dụng.
maxvgi

Điều đó tốt cho phía quản trị viên. Nhưng phía frontend cũng nên thay đổi tên cookie trong loại giải pháp này, phải không?
Butussy Butkus

@BriptButkus bạn nói đúng. Xin lỗi, tôi đã không viết điều này bởi vì tôi không có loại vấn đề như vậy.
maxvgi

Nó ổn, vẫn hữu ích cho một số người.
Butussy Butkus

0

Nếu bạn vẫn không thể đăng nhập vào frontend của mình (không thể tạo phiên khách hàng) vì các vấn đề về cookie, thì vui lòng ghi đè tệp lõi tương ứng

Trước 1.8.x. phiên bản - ứng dụng / mã / lõi / Pháp sư / Khách hàng / Mô hình / session.php

từ 1.8.x. phiên bản ứng dụng / mã / lõi / Mage / Core / Model / Phiên / Trừu tượng.php

Nhận xét các dòng chỉ ra trong chủ đề này. Điều này đã khắc phục sự cố với đăng nhập của khách hàng trên frontend trên cửa hàng phiên bản 1.8.x trước.

/magento//a/34057/695

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.