2012-10-10 46 views
1

我有一個應用程序運行使用asp.net身份驗證和SQL Server sessionState模式。出於某種原因,會議似乎永遠不會過期我們的環境中的一個。會話永不過期MOSS 2007託管asp.net使用SQLServer sessionState模式

這是從web.config文件的摘錄:

<sessionState mode="SQLServer" timeout="1" allowCustomSqlDatabase="true" partitionResolverType="Microsoft.Office.Server.Administration.SqlSessionStateResolver, Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" sessionIDManagerType="Lanap.BotDetect.Persistence.CustomSessionIDManager, Lanap.BotDetect, Version=2.0.15.0, Culture=neutral, PublicKeyToken=74616036388b765f" /> 

正如你所看到的,應用程序在負載平衡MOSS2007實例承載的,所以它具有將sessionState DB自定義SQL參數。

從我對SO的探索中,最常見的問題似乎是禁用的SQL Server代理或丟失/未運行的SQL Server代理作業。 我認爲這不是這種情況。我去了主持會議的ASPStateTempSessions表,並檢查其行爲是否一致。當我登錄到我的網站時,會使用會話ID創建一條線路,1到2分鐘後它被銷燬(會話過期)。但是,如果我然後返回到我的網站並刷新它,而不是被註銷,我仍然登錄。如果我再次訪問ASPStateTempSessions表,則會創建一個具有相同會話ID的新行。

據我所知,會話ID生存周...重新啓動瀏覽器所在的計算機不會改變任何東西。清除cookie確實如此。很明顯,瀏覽器中的cookie正在觸發服務器上會話的重新創建。

此外,我肯定我沒有在無Cookie模式下運行。首先,我可以在我的瀏覽器中看到cookie,並且它所使用的URL不包含sessionId(我被引導理解爲識別是否運行無Cookie會話的區分標準)。

我有幾種環境。一個在工作(我們的Live服務器),一個不在(我們的Demo服務器)。當比較兩個web.config文件中,這是最有可能意味着什麼不同的是這個:

Live服務器:

<authentication mode="Forms"> 
    <forms loginUrl="/_layouts/ClientPortal/login.aspx" /> 
</authentication> 

演示服務器:

<authentication mode="Forms"> 
    <forms loginUrl="/_layouts/ClientPortal/login.aspx" name=".ASPXAUTH" domain=".shlsolutions.net" protection="All" path="/" timeout="2880" /> 
</authentication> 

這樣做的原因不同的是該應用程序需要能夠在演示環境中使用跨域身份驗證。

我很確定在web.config文件中有一些東西需要改變,但我真的不知道該怎麼做。你能幫助我嗎?

編輯:cookie的複製/粘貼

.ASPXAUTH=BDEBD7975B717219A24D8D2FB22ADF523F4E63C9619B758A9F500CC2C9967156A9CFDB057A2DFC4DF9157A1D6E0F6EA3FBBA90C3D566FEB9E7F63AA4DBBDF68A32A5518175F6073E81677069C8205D9433306DCE331921237189DEECE59B6C7494EA6369C6D1BEAE544E83295D942DCE856718C5B095D695DB42D68BF75991A5EE37246E37B96F1675547E87338B89FE669EFD2A5AB38A15F7926025791F8FC17A02882B; path=/; domain=.shlsolutions.net 
ASP.NET_SessionId=pa5v0f2mnc20jybxq4bmbr20; path=/; domain=uat.central.shlsolutions.net; HttpOnly 
.ASPXAUTH=D3DCB91EA8705E7350AB2BEDBDC79F37C87CB391AFF81A9F07CAE72DB7BDBFA2AA62B1EF538C7EF77C7874D84A09DCDADF186884190B9BEDA56E73E9A1EED1948A6C75E618D4FD7AA9344C234B6472E3BEEC088911112877E7A77A6E2B27CA8EF69BE20B38591EDB9706225FA9831890B1C4684B3D9075153CB22CC37140F8C05811C44853DC3E7278740B7BBDC55627E801D81ED8EE8ABC07AA8CFF1F3F59EED9606ABB; path=/; domain=uat.central.shlsolutions.net; HttpOnly 
__utma=164265915.107905765.1350568100.1350661280.1350898679.7; expires=Wed, 22 Oct 2014 09:37:58 GMT; path=/; domain=.uat.central.shlsolutions.net 
__utmb=164265915.1.10.1350898679; expires=Mon, 22 Oct 2012 10:07:58 GMT; path=/; domain=.uat.central.shlsolutions.net 
__utmc=164265915; path=/; domain=.uat.central.shlsolutions.net 
__utmz=164265915.1350568100.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); expires=Mon, 22 Apr 2013 21:37:58 GMT; path=/; domain=.uat.central.shlsolutions.net 

回答

0

ASP.Net會話狀態使用滑動過期機制,在默認情況下應在60幾分鐘而不是從客戶端該會議是聽到後到期的會話狀態對象創建。

有一個已知問題的SharePoint從來沒有清理,這些會話狀態記錄了ASPStateTempSessions表: http://blogs.msdn.com/b/toddca/archive/2009/03/17/sharepoint-session-state-the-guest-that-just-won-t-leave.aspx

希望這有助於?

+0

不,我檢查了桌子並清理乾淨。我看到該線路被創建並隨着會話到期而被刪除... –

+0

您是否已經離開60分鐘通過了?否則會話不會過期!它是到期而不是絕對到期。 – sainiuc

+0

我很積極。無論我保留默認的超時值,還是將其更改爲更小的值,我都可以自行進入表格並驗證行被刪除 - 這是因爲會話過期。然後,無論何時我再次啓動瀏覽器(甚至3天后),該行都會重新創建 - Cookie會觸發具有相同會話標識的會話重新創建。 –