Cookie tidak berfungsi dengan subdomain

11

Kami memiliki situs utama di example.com. Masuk ke example.com/adminberfungsi dengan baik di sana.

Tetapi pada situs pengujian di test.example.com/adminsaya tidak dapat masuk ke admin tanpa terlebih dahulu menghapus semua example.comcookie. Kemudian saya bisa masuk, tetapi segera setelah saya masuk ke example.com/adminklik berikutnya pada server uji menendang saya kembali ke halaman login.

Saya tidak tahu apakah ini memengaruhi login pelanggan.

Apakah ada konfigurasi di situs utama atau situs pengujian yang akan menyelesaikan masalah ini?

Butkus Buttle
sumber

Jawaban:

14
  1. Pada menu Admin, pilih Sistem> Konfigurasi. Kemudian di panel di sebelah kiri, di bawah Umum, klik Web.
  2. Luaskan bagian Manajemen Cookie Sesi

Di example.comtoko, tetapkan yang berikut ini:

  1. Setel Cookie Domain menjadi example.com (biasanya pengaturan ini adalah .example.com dengan titik di depan, Anda dapat mencobanya tanpa dalam hal ini).

Di test.example.comtoko, tetapkan yang berikut ini:

  1. Tetapkan domain Cookie ke .test.example.com di lingkungan pengujian. ("." di depan domain seharusnya baik-baik saja di sini)
Anna Völkl
sumber
2
Hanya sebuah catatan, Langkah 3 tentang bagian .depan domain, penting!
B00MER
Hai Anna. Haruskah domain cookie disetel ke ".example.com" di example.comadmin, test.example.comadmin, atau keduanya?
Buttle Butkus
Saya akan menetapkannya sebagai konfigurasi default (yang saya kira adalah admin example.com Anda). Jadi ini berarti .example.com untuk semua cakupan.
Anna Völkl
@ AnnaVölkl Saya tidak yakin di sini. Anda mengerti saya memiliki dua instalasi magento yang sepenuhnya terpisah pada dua mesin yang berbeda, kan? Satu menggunakan example.com, yang lain test.example.com. Mereka berdua memiliki admin mereka sendiri . Tetapi Anda hanya memberi tahu saya untuk menetapkan domain untuk salah satu admin. Apakah Anda mengatakan saya harus membiarkan yang lain kosong?
Buttle Butkus
Ah, begitu. Memang saya tidak sadar ini adalah instalasi 2 terpisah. Apakah toko utama berjalan dengan atau tanpa www-Domain? Anda dapat mengatur Domain Cookie pada Tes ke test.example.comdan di toko utama untuk www.example.comkemudian menghindari cookie yang tumpang tindih.
Anna Völkl
9

Anna membuat beberapa poin bagus dan jawabannya akan bekerja untuk banyak orang, tetapi tidak untuk saya, jadi saya memposting jawaban saya sendiri. Mungkin masalah saya jauh lebih mendasar daripada yang dia tangani.

Solusi saya adalah mengubah domain situs saya dari example.commenjadi www.example.com. Bahkan, penelitian saya di internet menunjukkan bahwa alasan situs seperti Amazon, Google, Ebay, dan setiap tujuan web utama lainnya menggunakan wwwawalan mungkin sebagian besar karena cara kerja cookie. Mungkin tidak.

Cara default cookie berfungsi adalah bahwa cookie berlaku untuk semua subdomain. Jadi jika example.commengirimi Anda cookie, maka Anda mengunjungi mail.example.com,, smile.example.comatau devsite.example.com, maka browser Anda akan mengirimkan cookie itu ke situs-situs itu dan situs-situs itu akan mencoba menggunakan cookie itu. Tetapi mereka tidak akan dapat menemukan sesi Anda kecuali mereka semua menggunakan folder sesi umum. Dan meskipun begitu, Anda mungkin akan mengalami masalah karena konfigurasi basis data yang berbeda, struktur aplikasi yang berbeda, dll.

Membuat perubahan melibatkan pembuatan pengalihan 301 dalam file htaccess root saya, mengubah url aman / tidak aman dalam core_config_datatabel database magento , mengubah situs ServerNamedi Apache VirtualHosts, dan memperbarui pengaturan DNS / server nama. Tapi itu layak.

Dengan membuat situs utama saya www.example.com, cookie-nya sekarang hanya akan berlaku untuk subdomainnya, seperti mail.www.example.com(dan kami tidak memiliki subdomain semacam itu). Browser klien yang mendapatkan www.example.comcookie tidak mengirimnya ke devsite.example.com, dan masalah ini terpecahkan. Plus itu benar-benar baik untuk memiliki wwwdi depan nama domain kami.

Butkus Buttle
sumber
1
Saya berharap saya bisa memberikan beberapa Suara Terpilih untuk jawaban ini. Saya mencari solusi selama berbulan-bulan dan semua orang terus mengatakan tentang Jalur Cookie dan Domain Cookie, tetapi itu tidak akan memperbaiki masalah jika Anda tidak menggunakan www. Terima kasih!!
Bruno Monteiro
Kami sudah memiliki www di domain cookie, tetapi masih gagal ...
Hitam
Apa yang masih gagal?
Buttle Butkus
3

Anda cukup mengubah nama cookie adminhtml untuk subdomain.

Dua perubahan dalam file app/code/core/Mage/Core/Controller/Varien/Action.php.

Di preDispatchbaris fungsi berubah

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

untuk

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

Dalam fungsi setRedirectWithCookieCheckberubah

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

untuk

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

Dan setelah itu cari teks

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

di semua file dan ganti dengan

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

jika ada kejadian akan ditemukan.

maxvgi
sumber
1
Bisakah Anda menjelaskan dengan kata-kata bagaimana kode Anda mengubah interaksi cookie klien dan server untuk mengisolasi sesi?
Buttle Butkus
@ButtleButkus masalahnya adalah example.com/admin menyetel cookie dengan nama adminhtmluntuk domain tersebut .example.com. Ketika Anda mencoba mengotorisasi di test.example.com/admin, itu mencoba melakukan sesuatu dengan cookie adminhtmluntuk .test.example.com. Masalahnya berbeda pada pengaturan Magento. Masalah utama adalah bahwa Anda tidak dapat mengubah cookie dari domain utama dari subdomain. Kode di atas membuat Magento untuk membuat cookie adminhtmluntuk example.com dan cookie adminhtml_subdomainuntuk subdomain.example.com, sehingga mereka tidak akan bercampur dengan cara apa pun. Ubah subdomainke yang benar yang Anda gunakan.
maxvgi
Itu bagus untuk sisi admin. Tapi sisi depan juga harus mengubah nama cookie dalam solusi semacam ini, kan?
Buttle Butkus
@ButtleButkus kamu benar. Maaf, saya tidak menulis ini karena saya tidak punya masalah seperti itu.
maxvgi
Tidak apa-apa, mungkin masih berguna bagi sebagian orang.
Buttle Butkus
0

Jika Anda masih tidak dapat login ke frontend Anda (sesi pelanggan tidak dapat dibuat) karena masalah cookie, maka silakan ganti file inti masing-masing

Pra 1.8.x. versi - aplikasi / kode / inti / Penyihir / Pelanggan / Model / session.php

dan

dari 1.8.x. versi aplikasi / kode / inti / Penyihir / Inti / Model / Sesi / Abstract.php

Komentari garis yang ditunjukkan di utas ini. Ini telah memperbaiki masalah dengan login pelanggan di frontend di toko versi pra 1.8.x.

/magento//a/34057/695

Haijerome
sumber