對於大多數的**來說,都會使用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...