2010-05-06 85 views
1

我正在嘗試在流程上創建單一登錄。我已經實現的方法使用將會話數據存儲在數據庫中。PHP單點登錄(SSO)生成新會話ID

當新用戶訪問網站(www.example2.com)時,會檢查認證表。由於這是他們第一次訪問該網站,因此不會有任何匹配。

瀏覽器被重定向到認證服務器www.example1.com/authenticate.php?session_id=ABC123其中ABC123表示在www.example2.com上創建的會話ID。隨後在www.example1.com上生成的會話ID將使用URL中設置的參數存儲在會話ID旁邊。

然後用戶被重定向回www.example2.com並找到會話id的匹配。

這個在FireFox中工作正常,但是當我在Chrome中嘗試時,我注意到瀏覽器被重定向回www.example2.com時生成的會話標識是一個新的會話標識。結果創建了一個無限循環。這種行爲在FireFox中也沒有表現出來。

什麼是導致生成新的會話ID?更重要的是,我能做些什麼來阻止它?

提前致謝!

編輯
我有一個邏輯錯誤導致無限循環。這現在在FireFox中再次正常工作,但Chrome和Internet Explorer仍然出現無限循環。

回答

-1

遵循了代碼的邏輯,我做了一些修改。現在一切似乎都在起作用。只是有點困惑,爲什麼這並不影響FireFox。

謝謝大家的關注。

+0

你是如何解決這個問題的?我遇到了與Chrome和會話ID相同的問題。 – Lancelot 2011-05-05 18:41:11

+0

是的,如果你會分享你的解決方案 – soupdiver 2012-04-24 15:10:44

0

會話的整個想法是它只適用於一個域。否則其他域可能會劫持你的會話。瀏覽器不應該爲其未寫入的域提交cookie(包含會話ID)。即www.yourbank.com登錄的會話ID不應該能夠被www.preatesteallingtheieves.com網站讀取,瀏覽器將阻止這種情況發生。 (不管使用什麼會話名稱)。

SO: 即使您給它們使用相同的名稱,會話ID也不會在域之間共享。

+0

我不會主動改變會話名稱。我只是存儲由「auth服務器」和「代理」設置的會話ID,並在數據庫中創建2的映射。所以auth服務器與全局會話數據(即用戶id)相關,代理持有特定於會話的會話數據(例如圖像captcha變量)。 – bigstylee 2010-05-07 07:30:28