Berbagi Sesi Antara Toko dengan Domain Berbeda

8

Saya memiliki tiga situs web pada instalasi Magento, masing-masing memiliki domain sendiri.

Sekarang karena keamanan browser-web Anda tidak dapat mengakses cookie dari domain lain, atau sesi.

Entah bagaimana saya harus bisa mengirimkan data sementara antara dua toko yang berbeda dengan domain yang berbeda.

Kasus penggunaan khusus saya:

Saya menggunakan GeoIP untuk memicu pengalihan ke toko negara yang benar, namun saya juga harus dapat menimpanya secara manual. Sekarang pada saat ini saya memiliki masalah di mana saya secara manual menimpa toko saat ini dengan cookie, namun ketika saya dialihkan ke toko lain, tidak ada cookie di toko lain, jadi itu jatuh kembali dan mencari pengguna toko berdasarkan GeoIP. Namun ini kemudian membuat loop infinity mengarahkan antara terlalu toko.

Ini dilakukan dengan mencari tahu kode situs web untuk toko yang ingin saya gunakan index.phpdengan modul khusus dan menjalankan Magento dengan kode yang benar. Ini menangani semua pengalihan dll untuk saya saat itu.

lukefowell
sumber
Apakah tampilan toko Anda ditempatkan di situs web yang berbeda? Maksud saya situs web dalam terminologi Magento. Jika ya, Anda mungkin juga perlu membaca artikel ini, yang menjelaskan, cara membuat ekstensi sederhana, yang berbagi keranjang belanja di antara berbagai situs web Magento: marius-strajeru.blogspot.com/2013/01/…
ceckoslab

Jawaban:

5

Anda dapat berbagi frontendcookie antara situs web magento dengan domain yang berbeda menggunakan solusi ainixon.me/set-cookie-on-cross-domains .

Anda perlu membuat cookies.phpfile dengan kode berikut

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

dan dalam templat magento Anda perlu menambahkan kode berikut setelah <body>tag

<?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 -->
elektroid
sumber
Hai solusi Anda luar biasa. Tapi saya agak bingung tentang versi Magento 2.1.3. jadi di mana saya harus memasukkan kode ini dalam versi baru ini?
Zammuuz
Beberapa implikasi keamanan dari saran ini dibahas di sini security.stackexchange.com/questions/174678/…
Goose
3

Arahkan saja dengan ?SID=yourSessionIdAnda dapat menggunakannya pada tampilan toko lain.

Fabian Blechschmidt
sumber
Magento tidak memiliki konfigurasi untuk mengaktifkan atau tidak SID di url? Saya pikir ada sesuatu di Konfigurasi> Web> Sesi. Tidak?
Sylvain Rayé
ya, saat Anda mengarahkan ulang di antara tampilan toko. ada sesuatu, tetapi saya tidak berpikir ini berfungsi jika Anda melakukannya secara manual. Tapi ya Luke, lihat ini di backend dan hasilnya, mungkin membuat hidup lebih mudah :)
Fabian Blechschmidt
Ini sudah diaktifkan, tetapi secara default saya tidak bekerja untuk saya. Modul yang kami buat dirancang untuk menarik lokasi berdasarkan IP dan kemudian mengarahkannya, dan juga memungkinkan orang untuk memilih toko. Saya hanya mengerjakan mage_run_code sebelum Mage :: run pada awalnya dipanggil. Tetapi saya tidak tahu bagaimana saya bisa menambahkan nilai sesi khusus sebelum mage dijalankan dan juga id sesi ditambahkan ke url redirect, karena ini ditangani dalam core / url
lukefowell
cukup cari kode untuk SID. Semuanya terjadi di sini: \Mage_Core_Model_Session_Abstract::setSessionId()jadi cukup periksa kapan id sesi diatur dan atur.
Fabian Blechschmidt
1
Anda mungkin ingin lebih spesifik ketika menyarankan ini. Jika SID ditambahkan ke URL yang tersedia dari tautan, pengguna dapat membagikan tautan itu di forum atau di tempat lain yang akan menyebabkan Anda berbagai macam masalah.
pspahn
2

Pastikan saja Use SID in frontenddiaktifkan.

Apa saja ...

  • URL yang dihasilkan oleh Mage::getUrl()
  • Arahkan ulang dengan $this->_redirectUrl($url);atauMage::app()->getFrontController()->getResponse()->setRedirect()

Maka akan berisi rasa hormat SID.

Jika Anda menggunakan filesuntuk penyimpanan sesi, pastikan direktori itu umum symlinked; jika Anda menggunakan Memcache / Redis / DB, ini bukan masalah.

-

Perlu diketahui, ada banyak cara anggun untuk menangani pengalihan GeoIP lebih jauh dari Magento. Anda bisa melakukannya di tingkat server web (memeriksa keberadaan masing-masing cookie "tanpa redirect").

Ben Lessani - Sonassi
sumber
Saya telah menemukan bahwa itu termasuk SID pada akhir URL pada awalnya tetapi itu tetap mengarahkan di dalam lingkaran. Yang ingin saya lakukan adalah ketika saya secara manual mengarahkan ulang nilai sesi untuk menghentikannya mencari IP lagi waktu berikutnya untuk mengirimnya kembali ke tempat asalnya. Namun saya mendapatkan kesalahan seperti "Mage registry key" controller "sudah ada" ketika saya mencoba mengakses metode pabrik di magento atau mengambil data sesi dll. Jadi saya mencoba mencari cara untuk melewati bendera untuk mengatakan "tidak ada tolong lihat lagi ". Ada ide?
lukefowell
Anda akan memiliki pengalihan loop hanya karena kode Anda sendiri. Tidak ada cara nyata saya dapat membantu Anda di sini, masalah Anda terlalu lokal.
Ben Lessani - Sonassi
0

Di admin Anda, buka Konfigurasi> Web> Sesi> Gunakan SID di Frontend dan aktifkan.

Ketika pergi dari satu situs ke situs lainnya, melewati sesi dengan memasukkan ini dalam url (gunakan &jika Anda sudah menggunakan ?untuk $_GETparameter)

?SID=<?php echo Mage::getSingleton('core/session', array('name' => 'frontend'))->getSessionId(); ?>
Angsa
sumber