多站點Session共享解決方案

2022-04-08 13:52:56 字數 2645 閱讀 2662

對於大多數的**來說,都會使用session來維護使用者在一次會話中操作;session對於任何web專案來說都是必不可少的(當然除去那裡**裡不包含任何使用者操作的,^_^這個對於web2.0時代的**來說好像是不太可能的吧)。對於單獨的站點來說,乙個站點只用乙個session就ok了,但對於同時多個站點來說,如何對多個站點時實現session共享呢?

常見的作法有:

•     使用cookie方式實現多個站點間的共享(這種方式只限於幾個站點都在同一網域名稱的情況下);

•     使用.net自動的狀態服務(asp.net state service);

•     使用.net的session資料庫;

•     使用memcacheddb。

以上幾種方案各有優點,至於每種方式的優點在那裡,缺點在那裡?一時半會真的很難說清,如果有一篇文章就能說清的,那都是扯蛋,這種東西沒有在實際中使用,單單在表現上說這個方案好那個方案不好,都是扯蛋。

我們的專案現在採用的是第三種方案,使用session資料庫解決多站點的session共享。有不同看法的朋友都可以聊一下,下面說一下我們的實現方式:

1.    既然使用session資料庫了,當然必須要先對資料庫進行建立,既然是使用微軟的方案了,微軟肯定也就為大家提供了相應的實現方式。通過命令列方式進入:

1 c:\windows\microsoft.net\framework64\v4.0.30319

在此目錄下執行:

1 aspnet_regsql.exe -sstype c -ssadd -d 你的資料庫名-u 使用者名稱-p 密碼-s 資料庫服務位址

注意:此處的引數是區分大小寫的;執行完上述命令後,會進行session資料庫建立階段,建立完成後可以開啟資料庫檢視建立是否成功。

2.    session資料庫建立成功了並不代表就可以實現多專案的session共享了,還需要對目前的session資料庫做一些小小的手腳,其實就是為了欺騙資料庫說「哎,我就乙個應用程式在執行。^_^」。下面來看看怎麼做這點小手段:

1alterprocedure[dbo].[tempgetappid]

2@appname    tappname,

3@appidint output

4as5set@appname=lower(@appname)

6set@appid=null

7  8selecttop1@appid= appid

9from[snssessiondb].dbo.aspstatetempapplications

10--where appname = @appname

11 12if@appidisnullbegin

13begintran

14 15select@appid= appid

16from[snssessiondb].dbo.aspstatetempapplications with (tablockx)

17where appname =@appname

18 19if@appidisnull

20begin

21exec gethashcode @appname, @appid output

22 23insert[snssessiondb].dbo.aspstatetempapplications

24values

25         (@appid, @appname)

26 27if@@error=2627

28begin

29declare@dupapp tappname

30 31select@dupapp=rtrim(appname)

32from[snssessiondb].dbo.aspstatetempapplications

33where appid =@appid

34 35raiserror('sql session state fatal error: hash-code collision between applications ''%s'' and ''%s''. please rename the 1st application to resolve the problem.',

3618, 1, @appname, @dupapp)

37end

38end

39 40commit

41end

42 43return0

其實只是做了一點改動,就是加了乙個top  1 ,我每次查的時候,只能第一次的appid這樣的話,就是說我多個專案只乙個session例項。

上面的各種手段都做了,其實目的只有乙個就是在專案中使用這個session資料庫(發點牢騷:說微軟坑爹吧,其實一點都不假,他啥都替你想到了,我們這只簡單的會使用他就行了,這也是一代一代.net開發人員的悲劇,每次微軟發生新的技術改動,我們這些苦逼的開發人員就要去學習學習,然後微軟突然那天說我不對這個技術再做公升級了,我要放棄他了,好了你就看吧,大街上乙個個苦著臉的,有一半都是搞開發的。)。怎麼在專案中使用他呢?修改web.config   在system.web 加入或修改以下項

1 2  

4. ok,你大功告成了.記得重啟一下iis ,最好把自己本機上的cookie或垃圾項清除一下,這樣效果更好。

通過上面的一系列操作,終於ok了,在專案中使用的時候,就像我們平常一樣賦值和呼叫就ok了。

ok了,終於寫完了。

作者 傑之藍

資料庫實現多站點共享Session

資料庫實現多站點共享session 多站點共享session有很多方法,多站點共享session常見的做法有 這裡主要介紹資料庫的形式儲存session,來實現多站點共享session。1.新建web站點,新增setsession.aspx 等頁面,如下圖 2.修改web.config 配置,增加 ...

資料庫實現多站點共享Session

資料庫實現多站點共享session 多站點共享session有很多方法,多站點共享session常見的做法有 這裡主要介紹資料庫的形式儲存session,來實現多站點共享session。1.新建web站點,新增setsession.aspx 等頁面,如下圖 2.修改web.config 配置,增加 ...

Tomcat多應用共享Session

如何在乙個tomcat下的幾個web應用之間共享session 我們採取的是集中管理的辦法。主要技術 1.設定context 的crosscontext true 使得各個web應用的servletcontext是可以互訪的 2.主動設定cookies,設定jsessionid為被共享的sessio...