2009-11-23 112 views
1

我正在使用zend框架,php,mysql在Ubuntu上的項目。Zend身份驗證問題與子域

我在本地機器上創建了主機名test.dev並使用zend認證。當用戶使用zend認證進行認證時,我爲登錄用戶標識設置會話變量。我在不同的頁面上使用這個會話變量(userid)來確認身份驗證。

問題: 現在我必須創建一個子域。我在本地機器上創建了一個新的主機名mypage.test.dev。兩個主機名都指向相同的目錄,例如/ var/www/test/public。但是當我登錄test.dev時,我必須再次登錄子域mypage.test.dev。即使會話變量test.dev不可訪問mypage.test.dev

如何使用一次登錄登錄所有子域名?

謝謝。

回答

1

一段時間後,我有我的解決方案。

我添加下面一行到的config.ini

session.cookie_domain = .test.dev 

然後添加以下行bootstrap.php中

Zend_Session::setOptions($this->getOption('session')); 

和會話變量正在測試的所有子域。 dev

2

會話變量存儲特定於每個特定的域地址。所以如果一個網站編碼不好,你登錄到http://mydomain.com,然後訪問該網站http://www.mydomain.com,你會遇到同樣的錯誤。

對此的一種可能的解決方案是設置一個web服務,它允許您訪問其他域並檢索任何存儲的會話變量以及驗證用戶。因此,例如,如果我登錄到test.dev,然後再訪問mypage.test.dev,則mypage.test.dev會向test.dev/auth-service/發出調用以驗證用戶,如果它是成功,然後返回所有存儲的會話變量,以便它們可以通過mypage.test.dev進行存儲。

也許更清晰的方法是始終只訪問來自一個域或另一個域的會話數據,並始終嚴格通過Web服務訪問會話數據,以便會話數據的接口在兩個站點之間保持一致。這確實提供了可能的性能,但是因爲直接訪問會話顯然比通過Web服務更快。

+0

感謝您的回覆。你能告訴我怎麼在Zend Framework中做到這一點。 – NAVEED 2009-11-24 06:34:11