多个asp.net程序共用Session(sso程序的外设接口)
?
最近一段時間,又有客戶要做sso單點登錄。
我以前設計了專門用于點擊登錄的頁面,web.config里面放置可修改的,驗證中心的地址。這樣如果很多客戶都用同一種單點登錄請求方式的時候,不同的客戶僅僅修改web.config里面的驗證中心的地址就可以了。
但是計劃永遠也趕不上變化。用戶的需求永遠是多樣的,導致程序不能滿足需求,這樣就得不斷的為每個客戶不能得sso接口,來修改程序。
于是,我想如果現在的程序不變,單獨寫一個sso單點登錄頁面。可這樣我遇到了一個問題,就是如果部署2個虛擬目錄(或網站)的話,就遇到了session的跨web的情況了。
在網上看到下面這篇文章:
前 一段時間被同一個站點的不同Web項目通用Session的問題苦惱,搞得我很不爽,好多天都在想這個問題,在朋友的幫助下,找到了解決方法,網上也看了 一些相關文章。不過這些文章描述的并不夠詳細,我把這些相關知識整理一下,方便自己以后查找,也方便以后碰到這樣問題的人,不要到處找資料,拼湊資料。
首先說明幾點:
1、不同站點或虛擬目錄是不能共享Session的
2、VS.NET默認創建的Web工程是一個工程一個虛擬目錄
3、多個工程最好只能有一套的Web.config和Global.asax
由于以上的原因我們用手動創建多個工程的時候就不能共享Session,但使用VS.NET中的創建->其它項目->企業級模板項目就不會出現這樣的問題了。
解決這個問題并不難,注意兩點就行了:
1、多個工程最好只能有一套的Web.config和Global.asax
把 這些工程合并到一個虛擬目錄下,至于Web.config和Global.asax,雖然一個工程可以配置一個,但是推薦還是整個web站點用一套配置, 而且不同目錄下的Web.config影響不同的目錄下aspx的配置,如果根目錄下和一個WEB應用程序目錄下都有Web.config文件,而且都定 義了,sessionState mode="InProc" 顯然這兩個應用的Session不可能共享了。
2、多個虛擬目錄合并,或只用一個站點,就可以了。
具體做法是,在IIS設置里 打開子工程的目錄 查看屬性->目錄->應用程序設置 中有個刪除按鈕,點那個刪除就會把這個目錄的虛擬目錄去除,這樣就OK了。
我遇到的問題就是沒有注意到第二點。
我的做法是:
在 資源管理器中工程目錄點右鍵->共享->Web共享->然后指定一個名稱,然后就用VS.NET打開就可以打開了,但就是不能共享 Session。沒有注意到IIS把里面的子工程也設為了虛擬目錄。原來打開的時候VS.NET會把另一個工程也設置 為一個虛擬目錄,所以Session就不能共享了。我唯一做的就是把那個虛擬目錄刪除就行了。就這么一個小問題搞的我好多天都沒有睡好覺。希望大家不要學 我喲
這里我們把原來的程序稱為A程序,新建的這個程序為B程序。
我新建了一個web工程,(由于測試所以未調用驗證中心)。
其功能為:建立用戶session,并跳轉的 A程序的管理后臺。
我把B程序里面的頁面放到相應的A程序下。B程序生成的dll文件,放A程序的bin目錄下。
(說白了,就是把B程序拷貝到A程序里面,但不替換原來的web.config、Global.asax等)
注意:這樣處理后,B程序調用的web.config就和A程序調用的web.config是同樣的一個了。大家在設計B程序的時候,一點要注意。
到iis里面我們測試一下吧,直接瀏覽B程序里面的頁面,我們看到直接進入到A程序的后臺管理了。跳過了A程序的登錄頁面。
成功。
?
轉載于:https://www.cnblogs.com/delphinet/archive/2010/03/31/1701657.html
總結
以上是生活随笔為你收集整理的多个asp.net程序共用Session(sso程序的外设接口)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css clearfix(针对火狐hei
- 下一篇: 禁止鼠标复制和右键