熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.Net Session超時的問題

2013-11-13 09:43:13  來源: .NET編程 
    注用這個方法前需要啟動ASPNET State Service:開始>運行>輸入 servicesmsc 回車 找到ASPNET State Service雙擊改成自動並啟用
   
    正常操作情況下Session會無故丟失因為程序是在不停的被操作排除Session超時的可能另外Session超時時間被設定成分鐘不會這麼快就超時的
   
    這次到CSDN上搜了一下帖子發現好多人在討論這個問題然後我又google了一下發現微軟網站上也有類似的內容
   
    現在我就把原因和解決辦法寫出來
   
    原因
   
    由於程序是默認配置所以WebConfig文件中關於Session的設定如下
   
    <sessionState    mode=InProc    stateConnectionString=tcpip=:    sqlConnectionString=data    source=;Trusted_Connection=yes    cookieless=true    timeout=/>
   
    我們會發現sessionState標簽中有個屬性mode它可以有種取值InProcStateServerSQLServer(大小寫敏感) 默認情況下是InProc也就是將Session保存在進程內(IIS是aspnet_wpexe而IIS是Wwpexe)這個進程不穩定在某些事件發生時進程會重起所以造成了存儲在該進程內的Session丟失
   
    哪些情況下該進程會重起呢?微軟的一篇文章告訴了我們
   
    配置文件中processModel標簽的memoryLimit屬性
   
    Globalasax或者nfig文件被更改
   
    Bin文件夾中的Web程序(DLL)被修改
   
    殺毒軟件掃描了一些config文件
   
    更多的信息請參考PRB:    Session    variables    are    lost    intermittently    in    ASPNET    applications
   
    解決辦法
   
    前面說到的sessionState標簽中mode屬性可以有三個取值除了InProc之外還可以為StateServerSQLServer這兩種存Session的方法都是進程外的所以當aspnet_wpexe重起的時候不會影響到Session
   
    現在請將mode設定為StateServerStateServer是本機的一個服務可以在系統服務裡看到服務名為ASPNET    State    Service的服務默認情況是不啟動的當我們設定mode為StateServer之後請手工將該服務啟動
   
    這樣我們就能利用本機的StateService來存儲Session了除非電腦重啟或者StateService崩掉否則Session是不會丟的(因Session超時被丟棄是正常的)
   
    除此之外我們還可以將Session通過其他電腦的StateService來保存具體的修改是這樣的同樣還在sessionState標簽中有個stateConnectionString=tcpip=:屬性其中有個ip地址默認為本機(你可以將其改成你所知的運行了StateService服務的電腦IP這樣就可以實現位於不同電腦上的程序互通Session了
   
    如果你有更高的要求需要在服務期重啟時Session也不丟失可以考慮將mode設定成SQLServer同樣需要修改sqlConnectionString屬性關於使用SQLServer保存Session的操作請訪問這裡
   
    在使用StateServer或者SQLServer存儲Session時所有需要保存到Session的對象除了基本數據類型(默認的數據類型如intstring等)外都必須序列化只需將[Serializable]標簽放到要序列化的類前就可以了
   
    如
   
    [Serializable]
   
    public    class    MyClass
   
    {
   
    ……
   
    }
   
    具體的序列化相關的知識請參這裡
   
    至此問題解決
From:http://tw.wingwit.com/Article/program/net/201311/11407.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.