CakePHP yapılan bir web sitesinde iki farklı etki alanları arasında oturumu sürdürmek Sorunu

3 Cevap cakephp

Ben daha önce de attılar hem de ... Ben iki dilde bir site oluşturduk. URL www.mainDomain.com (İngilizce) ve www.fr.subDomain.com (Fransızca) ile diğer biri.

Hem CakePHP'de yapılır, fransız ben sadece Fransızlara onun görüşlerini değişti. Herkes giriş İngilizce sürümünde en ve daha sonra Fransızca sürümü geçer, oturum onu ​​tanır ve tekrar giriş için sormuyor Ama sorundur. Ben kadar kadar yapmış Web uygulamasında büyük hata olması haline gelmiştir.

Swanny a link geçmesi söyledi ve link.Apparently dedi gibi ben benim uygulama yaptım gibi bunun için, bu iki etki (ana etki alanı arasında oturum paylaşılan giriş için çalıştı ve alt alan bulunuyor .) Ben iyice kontrol Ama ne zaman, ben de site veritabanından son NEWS atma tanıdı, hem veri farklıdır. Sadece yanlış olsaydı ben bazı oturum dizideki veritabanına değişkeni kaydetmek değiştirildi kontrol etmek. Ama şimdi bir şey (oturum) hatırlamak için reddetti. Herkes ne bu ile sorun olabilir bana önerebilir misiniz ve bunu nasıl çözebilir? ...?

Şimdiden teşekkürler

3 Cevap

Ben tamamen anlamak emin değilim, ama deneyeceğim. Ben bu session.cookie_domain isimli bir PHP ayar olduğunu düşünüyorum.

Varsayarsak web siteleri aşağıdaki URL'leri var:

İstediğiniz ayar: .example.org.

Sen, php.ini Bu ayarlamak bir .htaccess dosyası ya da PHP kendisi yapabilirsiniz:

<?php ini_set('session.cookie_domain', '.example.org'); ?>

: Web siteleri tamamen farklı iki etki, örneğin üzerinde çalıştırırsanız

... Sonra bu iki farklı etki arasındaki çerez paylaşmak için hiçbir yolu yoktur.

@ Bu dooltaz harika bir çözümdür. Be sorun pasta benden sonra çerez ayarı gibi görünüyor olmasıdır. Ne yaptım yerine bir yönlendirme yöntemi ro kullanıcı göndermek ve daha sonra afterFilter için çerez ayarı hareket ettirmek

    function afterFilter() {
	if (!empty($this->params['url']['session_key'])) {
		// Setup variables here...
		setcookie(Configure::read('Session.cookie'), $this->params['url']['session_key'], time()+360000, '/');
		// Cakes cookie method will put your cookie name in [] so it does not work.
	}
}

(Ayrıca kod yazım hatası sabit ..)

Eğer iki farklı etki alanı varsa, ben şu öneririm:

"Www.mainDomain.com" On, "www.fr.subDomain.com" sitesine bir link koymak ve görünümü dosyasında tanımlama geçmek:

$session_cookie = $_COOKIE[Configure::read('Session.cookie')];
echo $html->link('See French Site', 'http://www.fr.subDomain.com/?session_key='.$session_cookie);

Ardından Fransız sitede> app_controller.php içinde beforeFilter () çerezleri taklit etmek kod biraz ekleyin.

function beforeFilter() {
    if(!empty($this->params['url']['session_key']) {
		// Setup variables here...
		setcookie(Configure::read('Session.cookie'), $session_cookie, time()+360000, '/', $domain);
		// You could use CAKE's setcookie command here.
	}
}

Şimdi çerezleri maç olduğunu, use veritabanı oturumları veya kek dosyası tabanlı oturum birine sahip olacak. Bu kurmak için core.php talimatları okuyun.

Bu temelde çeşitli siteler üzerinde aynı oturumu paylaşmak için izin vermelidir. Ben tek bir giriş ile birden fazla site üzerinden ACL uygulanması ortasında aslında değilim. Bu biraz zor olabilir alabilirsiniz, ama sadece bunu adım adım yapmak, iyi yapacağız. Ayrıca nasıl çalıştığını görmek için Kek çekirdek koduna atlamak için korkmayın.