網頁跳轉的方式的sso,退出登錄的實現會麻煩一點.一開始,我們是在portal站點那里,把所有應用程序的退出都放在portal的退出頁面.從實現各個子站點的退出.但后來發現,有時候有些子站點,退不出來.所以后面,我們就改用統一的處理方式,然后ajax統一處理推出.
其實退出也很簡單,就是清理該清理的憑證就行了.我們當時做了一個httphander處理,代碼如下.
1 public class LoginoutHandler : IHttpHandler { 2 3 public void ProcessRequest (HttpContext context) { 4 try 5 { 6 context.Session.Clear(); 7 context.Response.Cookies.Clear(); 8 context.Response.Write("<msg>1</msg>"); 9 } 10 catch 11 { 12 context.Response.Write("<msg>0</msg>"); 13 } 14 15 16 17 18 } 19 20 public bool IsReusable { 21 get { 22 return false; 23 } 24 } 25 26 }
關於這個退出,我們也2個方案.一個方案是把所有子站點,通過配置文件的方式保存起來,然后portal退出時,調用所有子站點的退出.但這方案存在2個問題,一是退出時間會比較長.二是退出比較麻煩.每增加一個站點,都增加一個配置. 后面改用另外一種方案. 就是在單點登錄跳轉中心,記錄所有用戶曾經跳轉過的站點. 然后在站點退出時,調用曾經跳轉過的站點的退出接口,而達到統一退出.
在這里補充一下,因為我們項目模塊比較多,一開始經常出現由於某個模塊的部署出問題,導致整個potal站點都出問題了.所以后面我們采去iis應用程序部署方案.每一個模塊的dll都獨立,從而達到互不影響. 但這也造成不少的問題,主要如下,一個是緩存不共享(當時用的企業庫的,后來我們采去另外一個緩存組件很好解決了這個問題,將在后面介紹),二是session不共享,因此退出時必須要掉用該模塊的退出.
好,各位,關於單點登錄,我就介紹到這里.
接下來我將會向大家介紹一下,如何通過url傳參數,來解決 window.showModalDialog誇域的技術,從而輕松實現資源共享.希望會對曾經碰到過類似問題的網友有幫助.
登錄代碼請看 http://www.cnblogs.com/jake1/archive/2013/04/28/sso_code.html
登錄設計請看 http://www.cnblogs.com/jake1/archive/2013/04/28/sso_page.html