在近期開發程式的過程了,放棄了微軟自帶的membership。登入採用了form驗證。並為了使用者資訊的儲存方便和資料庫壓力的減輕,採用的session儲存資料。
可是在除錯的過程中發現session發生了錯誤,返回的值都是自定義捕捉錯誤後返回的值。經過研究發現是session丟失了。於是對asp.net中的session機制進行了研究。
對於session的失效或者丟失,那麼具體出現這種情況的問題主要有:
asp.net session的實現
asp.net的session是基於httpmodule技術做的,httpmodule可以在請求被處理之前,對請求進行狀態控制,由於session本身就是用來做狀態維護的,因此用httpmodule做session是再合適不過了。
原因1:
bin目錄中的檔案被改寫,asp.net有一種機制,為了保證dll重新編譯之後,系統正常執行,它會重新啟動一次**程序,這時就會導致session丟失,所以如果有access資料庫位於bin目錄,或者有其他檔案被系統改寫,就會導致session丟失
原因2:
資料夾選項中,如果沒有開啟「在單獨的程序中開啟資料夾視窗」,一旦新建乙個視窗,系統可能認為是新的session會話,而無法訪問原來的session,所以需要開啟該選項,否則會導致session丟失
原因3:
似乎大部分的session丟失是客戶端引起的,所以要從客戶端下手,看看cookie有沒有開啟
原因4:
session的時間設定是不是有問題,會不會因為超時造成丟失
那麼關於除錯過程中session丟失的問題,最大的可能性就是原因1,經過反覆實驗,確定丟失的原因是第乙個。
這個時候就必須對session中儲存的值是否是我們需要的值進行判斷。
以此類推,在以前部署或者跟新**的過程中也發生過使用者輸入的資訊丟失,最後發現不是丟失,而是將該使用者的id儲存成了-1(一般對session讀取出現錯誤時返回的值),那麼可能就是更新的過程中發生的session丟失。由於問題並沒有重**生,所以並沒有在意,現在這樣的問題再次出現,該引起重視了。
所以,在對**或者專案進行更新的過程中,最好採用徹底斷線更新,避免此類問題發生。另外對每次session讀取後進行必要的值範圍判斷也是非常有必要的。
面試過程中
面試過程中,面試官會向應聘者發問,而應聘者的回答將成為面試官考慮是否接受他的重要依據。對應聘者而言,了解這些問題背後的 貓膩 至關重要。本文對面試中經常出現的一些典型問題進行了整理,並給出相應的回答思路和參 讀者無需過分關注分析的細節,關鍵是要從這些分析中 悟 出面試的規律及回答問題的思維方式,達到...
解決Android啟動過程中Log丟失問題的方案
在android開發中,遇到需要debug啟動過程中的問題時,往往會因為在啟動過程中log丟失而異常麻煩,為此我們用了下面這個簡單的方案。假設你的應用或者framework的某些服務需要在開機時越快啟動越好,那麼在啟動過程中某些log會丟失,但是程式的邏輯不會丟失,為此我們可以把需要分析的關鍵部位的...
MyEclipse除錯過程中遇到乙個奇怪的問題
雖然看著別人的 有些頭大,但是咱目標也不高,調通了就成。為了除錯方便,我將tomcat下配置的應用全都去掉了,想看看tomcat會不會報錯。在啟動tomcat時顯示某個應用目錄不存在,不是取消全部應用了嗎?找一找原來是server.xml中設定了context。刪掉這個配置,仍然報錯,找不到應用目錄...