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