Asp.net的Session過期(轉載)

 1.目錄刪除及重命名操作 :

    如果你發現session突然無理由的丟失,而當你認真的檢查代碼並且排除其它常規可能丟失的可能性時,你可能會像我一樣,幾乎要接近崩潰~

    後來發現問題出在我用代碼創建一個臨時目錄然後刪除臨時目錄的刪除操作上。

    現在和大家分享下:希望對碰到類似釘子的朋友有用……

    說白了session丟失實質就是:應用程序重起!

    應用程序什麼時候自動重起呢?

    請參考:Anand在dotnetindia.com發表的文章

    也就是說 asp.net 會監視應用程序目錄,一但有被監視的動作發生(比如:修改了config、重命名目錄等)應用程序就會自動重起當然這時你的session一定丟失了。

    如果避免不了這種操作(如:重命名目錄);這裏我們可以用cookie存信息或存到數據庫去;

    注意:除了以上列出的英文條件外。目錄的刪除操作一定丟失session.asp.net的內部機制對待目錄有點像個守財奴,它死守着目錄,你創建它不會管(往裏加),一但創建他就會監視該目錄,若你要刪除或重命名它的(動它的目錄),它就發生重起了……

    2.Frame中關於Session丟失

    在開發中,我們經常會遇到使用Frame來工作,而且有時是爲了跟其他網站集成,應用到多域的情況下,而Iframe是不能保存Session的。因此, 網上可以找到很多相關的文章,如果網站可以採用設置Web.Config中的配置:<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="40" />把cookieless="false"改成"true"就可以了。但也同樣有個小問題,就是如果頁面中採用Javascript的window.location.href=''這樣的方式來重定向的話,系統會認爲這是另一個新的請求,產生一個新的SessionId,導致原Session同樣的丟失。所以對於重定向,還是使用Response.Redirect()爲好。

    除了Ifrmae有丟Session問題外,frameset也有同樣的問題。Frameset的問題更不移定,是有時會丟,有時不會丟,這更認人頭痛, 在網上找到了一個方法,在頁面page_onload裏添加一語句:Response.AddHeader("P3P","CP=CAO PSA OUR");FrameSet中的Session丟失問題就解決了。

發佈了4 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章