Condivisione di sessioni tra negozi con domini diversi


8

Ho tre siti Web su un'installazione di Magento, ognuno ha il suo dominio.

Ora a causa della sicurezza del browser web non è possibile accedere ai cookie di un altro dominio, né sessioni.

In qualche modo ho bisogno di essere in grado di passare dati temporanei tra due negozi diversi con domini diversi.

Il mio caso d'uso specifico:

Sto usando GeoIP per innescare un reindirizzamento all'archivio dei paesi corretti, tuttavia devo anche essere in grado di sovrascrivere manualmente questo. Al momento sto riscontrando il problema di sostituire manualmente il negozio corrente con un cookie, tuttavia quando vengo reindirizzato all'altro negozio, non ci sono cookie sull'altro negozio, quindi cade indietro e cerca gli utenti negozio basato su GeoIP. Tuttavia, questo crea quindi un ciclo infinito che reindirizza tra i negozi troppo.

Questo viene fatto capendo il codice del sito Web per lo store che voglio usare index.phpcon un modulo personalizzato ed eseguendo Magento con il codice corretto. Questo gestisce quindi tutti i reindirizzamenti, ecc. Per me.


Le visualizzazioni del tuo negozio sono collocate in siti Web diversi? Intendo siti web nella terminologia di Magento. Se sì, potresti anche dover leggere questo articolo, che spiega, come creare una semplice estensione, che condivide il carrello tra diversi siti Web Magento: marius-strajeru.blogspot.com/2013/01/…
ceckoslab

Risposte:


5

Puoi condividere i frontendcookie tra i siti Web di Magento con domini diversi utilizzando quella soluzione ainixon.me/set-cookie-on-cross-domains .

Devi creare un cookies.phpfile con il seguente codice

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

e nel modello magento dovrai aggiungere il seguente codice dopo il <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 -->

Ciao, la tua soluzione è fantastica. Ma sono un po 'confuso riguardo alla versione Magento 2.1.3. quindi dove devo inserire questo codice in questa nuova versione?
Zammuuz,

Alcune implicazioni di sicurezza di questo suggerimento sono state discusse qui security.stackexchange.com/questions/174678/…
Goose

3

Basta reindirizzare con ?SID=yourSessionIdquindi puoi semplicemente usarlo nell'altra vista del negozio.


Magento non ha una configurazione per abilitare o meno il SID negli URL? Penso che ci sia qualcosa in Configurazione> Web> Sessione. No?
Sylvain Rayé,

sì, quando reindirizzi tra visualizzazioni di negozi. c'è qualcosa, ma non credo che funzioni se lo fai manualmente. Ma sì Luke, dai un'occhiata a questo nel backend e nel conseguente, potrebbe rendere la vita più semplice :)
Fabian Blechschmidt,

Questo è già abilitato, ma non funziona per me per impostazione predefinita. Il modulo che abbiamo creato è progettato per estrarre una posizione basata sull'IP e quindi dirigere di conseguenza, e consentire anche alle persone di selezionare i negozi. Sto semplicemente elaborando il codice mage_run prima che Mage :: run venga inizialmente chiamato. Ma non so come posso aggiungere un valore di sessione personalizzato prima dell'esecuzione del mage e anche avere l'ID di sessione aggiunto al reindirizzamento
dell'URL

basta cercare il codice per SID. Qui succede tutto: \Mage_Core_Model_Session_Abstract::setSessionId()quindi controlla quando è impostato l'id di sessione e impostalo.
Fabian Blechschmidt,

1
Potresti voler essere più specifico quando suggerisci questo. Se il SID viene aggiunto a un URL disponibile da un collegamento, l'utente potrebbe condividere quel collegamento su un forum o altrove che causerebbe problemi di ogni genere.
pspahn,

2

Assicurati solo che Use SID in frontendsia abilitato.

Qualunque ...

  • URL generato da Mage::getUrl()
  • Reindirizzare con $this->_redirectUrl($url);oMage::app()->getFrontController()->getResponse()->setRedirect()

Conterrà quindi il rispetto SID.

Se si utilizza filesper l'archiviazione di sessioni, assicurarsi che la directory sia comunemente symlinked; se stai usando Memcache / Redis / DB, questo non è un problema.

-

Basta notare che ci sono molti modi graziosi per gestire il reindirizzamento GeoIP più in alto rispetto a Magento. Potresti farlo a livello di server web (controllando la presenza del tuo rispettivo cookie "senza reindirizzamento").


Ho scoperto che inizialmente include il SID alla fine dell'URL, ma continua a reindirizzare in cerchio. Quello che voglio fare è quando reindirizzo manualmente impostare un valore di sessione per impedirgli di cercare nuovamente l'IP la prossima volta per rimandarlo da dove proviene. Tuttavia ricevo un errore come "controller" chiave di registro Mage "già esistente" quando mai provo ad accedere a qualsiasi metodo di fabbrica in magento o recuperare dati di sessione ecc. Quindi sto cercando di trovare un modo per passare un flag per dire "no don cerca di nuovo per favore ". Qualche idea?
lukefowell,

Avrai un ciclo di reindirizzamento solo a causa del tuo codice. Non c'è un vero modo in cui posso aiutarti qui, il tuo problema è troppo localizzato.
Ben Lessani - Sonassi,

0

Nel tuo amministratore, vai a Configurazione> Web> Sessione> Usa SID su Frontend e abilita.

Quando si passa da un sito all'altro, passare la sessione includendola nell'URL (utilizzare &se si utilizza già ?per un $_GETparametro)

?SID=<?php echo Mage::getSingleton('core/session', array('name' => 'frontend'))->getSessionId(); ?>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.