古詩詞大全網 - 成語用法 - Asp.Net處理Session失效解決方案

Asp.Net處理Session失效解決方案

 檢查ASP NET Session是否失效 是否超時 默認是 分鐘 設置的方法是Session TimeOut= ;或者您可以設置到更高 這個數值的單位是分鐘 大家視情況而定

 檢查代碼有無Session Abandon()之類的 壹旦調用 Abandon 方法 當前會話不再有效 同時會啟動新的會話

 ASP NET中使用了ACCESS數據庫 而且數據庫是放在bin目錄中的 解決方法是不要放會更新的文件在BIN目錄中

 從同壹個頁面傳到另壹個頁面才能延續同壹個session 也就是說session不可跨域 同時客戶端壹關閉瀏覽器或壹關閉瀏覽頁 Session也消失了 再次訪問時又會創建新的Session 但還會在服務器上存活等待超時 只是調用不到了 另外比如在第壹個頁面置了SESSION 然後REDIRECT去第二個頁面 解決方法是在REDIRECT中設置endResponse為FALSE

 Iframe丟Session的原因 session是客戶端和服務器端***同認證的 客戶端存儲標識 通過附加在頁面的頭發送給服務器端 服務器進行識別 如果符合條件就可以獲得相應的session操作權

 但如果頁面是來自框架的 而框架的父頁和框架不是壹個站點的話 客戶端默認是禁止向頁面附加頭信息的 這樣服務器端就無法識別客戶端框架裏面的頁面 自然不能操作Session 解決辦法:  Response AddHeader( P P CP=CAO PSA OUR ) 或者在Window服務中將 State Service 啟動

 有些殺病毒軟件會去掃描您的Web Config文件 那時Session肯定掉 這是微軟的說法 解決辦法:  使殺病毒軟件屏蔽掃描Web Config文件(程序運行時自己也不要去編輯它)

 ASP NET默認配置下 Session莫名丟失的原因及解決辦法

 正常操作情況下Session會無故丟失 因為程序是在不停的 *** 作 排除Session超時的可能 另外 Session超時時間被設定成 分鐘 不會這麽快就超時的

 現在我就把原因和解決辦法寫出來

 ASP NET Session失效的原因

 由於程序是默認配置 所以Web Config文件中關於Session的設定如下

 <sessionState mode= InProcstateConnectionString= tcpip= :

 sqlConnectionString= data source= ;Trusted_Connection=yescookieless= true

 timeout= />

 我們會發現sessionState標簽中有個屬性mode 它可以有 種取值 InProc StateServer?SQLServer(大小寫敏感) 默認情況下是InProc 也就是將Session保存在進程內(IIS 是aspnet_wp exe 而IIS 是W wp exe) 這個進程不穩定 在某些事件發生時 進程會重起 所以造成了存儲在該進程內的Session丟失

 哪些情況下該進程會重起呢?微軟的壹篇文章告訴了我們

  配置文件中processModel標簽的memoryLimit屬性

  Global asax或者nfig文件被更改

  Bin文件夾中的Web程序(DLL)被修改

  殺毒軟件掃描了壹nfig文件

 更多的信息請參考PRB: Session variables are lost intermittently in applications

 ASP NET Session失效的解決辦法

 前面說到的sessionState標簽中mode屬性可以有三個取值 除了InProc之外 還可以為StateServer SQLServer 這兩種存Session的方法都是進程外的 所以當aspnet_wp exe重起的時候 不會影響到Session

 現在請將mode設定為StateServer StateServer是本機的壹個服務 可以在系統服務裏看到服務名為 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的對象除了基本數據類型(默認的數據類型 如int string等)外 都必須序列化 只需將[Serializable]標簽放到要序列化的類前就可以了

 如

 [Serializable]

 public class MyClass

 {

 

lishixinzhi/Article/program/net/201311/12478