Chia sẻ phiên giữa các cửa hàng với các tên miền khác nhau


8

Tôi có ba trang web trên bản cài đặt Magento, mỗi trang có một tên miền riêng.

Bây giờ do bảo mật trình duyệt web, bạn không thể truy cập cookie từ một tên miền khác, cũng không phải phiên.

Bằng cách nào đó tôi cần có khả năng truyền dữ liệu tạm thời giữa hai cửa hàng khác nhau với các tên miền khác nhau.

Trường hợp sử dụng cụ thể của tôi:

Tôi đang sử dụng GeoIP để kích hoạt chuyển hướng đến cửa hàng quốc gia chính xác, tuy nhiên tôi cũng cần có khả năng ghi đè thủ công này. Hiện tại tôi đang gặp sự cố khi tôi ghi đè thủ công vào cửa hàng hiện tại bằng cookie, tuy nhiên khi tôi được chuyển hướng đến cửa hàng khác, không có cookie trên cửa hàng khác, vì vậy nó sẽ quay lại và tìm kiếm người dùng lưu trữ dựa trên GeoIP. Tuy nhiên, điều này sau đó tạo ra một vòng lặp vô cực chuyển hướng giữa các cửa hàng quá.

Điều này được thực hiện bằng cách tìm ra mã trang web cho cửa hàng tôi muốn sử dụng index.phpvới một mô-đun tùy chỉnh và chạy Magento với mã chính xác. Điều này xử lý tất cả các chuyển hướng vv cho tôi sau đó.


Là lượt xem cửa hàng của bạn được đặt trong các trang web khác nhau? Ý tôi là các trang web theo thuật ngữ của Magento. Nếu có, bạn cũng có thể cần đọc bài viết này, giải thích, cách tạo tiện ích mở rộng đơn giản, chia sẻ giỏ hàng giữa các trang web Magento khác nhau: marius-strajeru.blogspot.com/2013/01/iêu
ceckoslab

Câu trả lời:


5

Bạn có thể chia sẻ frontendcookie giữa trang web magento với các tên miền khác nhau bằng giải pháp đó ainixon.me/set-cookie-on-cross-domains .

Bạn cần tạo cookies.phptập tin với đoạn mã sau

<?php
    setcookie("frontend", htmlspecialchars($_GET['SID']), time() + 86400);
?>

và trong mẫu magento, bạn sẽ cần thêm mã sau đây sau <body>thẻ

<?php 
$this_session_id = Mage::getSingleton('core/session', array('name' => 'frontend'))->getSessionId(); 
?>
<!-- setting cookies to other domains --> 
<img src="http://anotherdomain.com/cookies.php?SID=<?php echo $this_session_id; ?>" style="display:none;" />
<img src="http://somedomain.ne/cookies.php?SID=<?php echo $this_session_id; ?>" style="display:none;" /> 
<!-- setting cookies to others domains ends -->

Chào giải pháp của bạn tuyệt vời. Nhưng tôi hơi bối rối về phiên bản magento 2.1.3. Vậy tôi nên nhập mã này vào đâu trong phiên bản mới này?
Zammuuz

Một số ý nghĩa bảo mật của đề xuất này đã được thảo luận ở đây security.stackexchange.com/questions/174678/
mẹo

3

Chỉ cần chuyển hướng với ?SID=yourSessionIdsau đó bạn có thể chỉ cần sử dụng nó trên chế độ xem cửa hàng khác.


Magento không có cấu hình để bật hay không SID trong các url? Tôi nghĩ rằng có một cái gì đó trong Cấu hình> Web> Phiên. Không?
Sylvain Rayé

có, khi bạn chuyển hướng giữa các lượt xem. có một cái gì đó, nhưng tôi không nghĩ rằng nó hoạt động nếu bạn làm nó bằng tay. Nhưng vâng, Luke, hãy xem xét điều này trong phần phụ trợ và kết quả, có thể làm cho cuộc sống dễ dàng hơn :)
Fabian Blechschmidt

Điều này đã được kích hoạt, nhưng tôi không làm việc cho tôi theo mặc định. Mô-đun chúng tôi tạo được thiết kế để kéo một vị trí dựa trên IP và sau đó trực tiếp phù hợp và cũng cho phép mọi người chọn cửa hàng. Tôi chỉ đơn giản là làm việc với mage_run_code trước khi Mage :: run ban đầu được gọi. Nhưng tôi không biết làm thế nào tôi có thể thêm giá trị phiên tùy chỉnh trước khi chạy pháp sư và cũng có id phiên được thêm vào chuyển hướng url, vì điều này được xử lý trong lõi / url
lukefowell

chỉ cần tìm kiếm mã cho SID. Mọi thứ xảy ra ở đây: \Mage_Core_Model_Session_Abstract::setSessionId()vì vậy chỉ cần kiểm tra khi id phiên được đặt và đặt nó.
Fabian Blechschmidt

1
Bạn có thể muốn được cụ thể hơn khi đề xuất này. Nếu SID được thêm vào một URL có sẵn từ một liên kết, người dùng có thể chia sẻ liên kết đó trên một diễn đàn hoặc bất kỳ nơi nào khác sẽ gây ra cho bạn tất cả các loại vấn đề.
pspahn

2

Chỉ cần đảm bảo Use SID in frontendđược kích hoạt.

Bất kì ...

  • URL được tạo bởi Mage::getUrl()
  • Chuyển hướng với $this->_redirectUrl($url);hoặcMage::app()->getFrontController()->getResponse()->setRedirect()

Sau đó sẽ chứa đựng sự tôn trọng SID.

Nếu bạn đang sử dụng filesđể lưu trữ phiên, chỉ cần đảm bảo thư mục là phổ biến symlinked; nếu bạn đang sử dụng Memcache / Redis / DB, đây không phải là vấn đề đáng lo ngại.

-

Chỉ cần lưu ý, có rất nhiều cách duyên dáng để xử lý chuyển hướng GeoIP xa hơn Magento. Bạn có thể làm điều đó ở cấp độ máy chủ web (kiểm tra sự hiện diện của cookie "không chuyển hướng" tương ứng của bạn).


Tôi đã thấy rằng nó bao gồm SID ở cuối URL ban đầu nhưng nó vẫn chuyển hướng xung quanh theo vòng tròn. Những gì tôi muốn làm là khi tôi chuyển hướng thủ công đặt giá trị phiên để ngăn nó tìm lại IP lần sau để gửi nó trở lại nơi nó đến. Tuy nhiên, tôi gặp lỗi như "Trình điều khiển khóa đăng ký" "đã tồn tại" khi tôi cố gắng truy cập bất kỳ phương thức xuất xưởng nào trong magento hoặc truy xuất dữ liệu phiên, v.v. Vì vậy, tôi đang cố gắng tìm cách truyền cờ để nói "không don Xin vui lòng tìm kiếm lại ". Có ý kiến ​​gì không?
lukefowell

Bạn sẽ có một vòng lặp chuyển hướng chỉ vì mã của riêng bạn. Không có cách nào thực sự tôi có thể giúp bạn ở đây, vấn đề của bạn là quá cục bộ.
Ben Lessani - Sonassi

0

Trong quản trị viên của bạn, đi đến Cấu hình> Web> Phiên> Sử dụng SID trên Frontend và bật.

Khi đi từ trang này sang trang khác, hãy chuyển phiên bằng cách đưa phần này vào url (sử dụng &nếu bạn đã sử dụng ?cho một $_GETtham số)

?SID=<?php echo Mage::getSingleton('core/session', array('name' => 'frontend'))->getSessionId(); ?>
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.