程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> 防止ASP Session丟失的方法

防止ASP Session丟失的方法

編輯:ASP技巧
也許很多ASP開發者都會遇到這樣的情況:在會話期間(session)無故丟失sessio n。換而言之,丟失了SessionID,同樣session級的變量也會丟失。 

  很多session丟失的原因是因為錯誤的程序或者是錯誤的虛擬目錄結構。 

  SessionID 的改變有下面幾個原因。 

  原因一: 

  Netscape的浏覽器會認為"/App/user.asp"跟"/app/user.ASP"是兩個不同的程序。它會自動地開始一個新的會話期(new session)。所以,才你的網站上一定要統一字母的大小寫。 

  原因二: 

  另外一個是原因是 Session.Timeout 的值。 

  Timeout這個屬性是用來設置Session的超時時間的,一分鐘為單位。假如一個用戶,在一個Timeout的時間內沒有刷新或者請求頁面,那麼會話就會結束(the se ssion ends)。當你再次請求頁面的時候,一個新的會話有會開始。 

  確信Timeout的值,是分鐘的。 

  格式: Session.Timeout [ = nMinutes] 

  原因三: 

  假如用戶把他們的浏覽器的cookie關了,當然session就不能保持。因為session的保持是要靠cookIE的。 

  要保持Session的狀態,浏覽器就必須支持cookIE,而且在打開的狀態。你當然可以用其他的方法 

  原因四: 

  常犯的錯誤就是,建立了錯誤的目錄結構。像下面的目錄結構: 

  root 放了global.asa 

  \virtual_root 沒有global.asa 

  \another_virtual_root 沒有global.asa 

  調用兩個virtual roots的頁面,就會執行相同的global.asa(root上的那個) 

  另外的一個目錄結構: 

  root 沒有global.asa 

  \virtual 放了global.asa 

  \another_virtual_root 另外一個global.asa 

  每一個不同目錄下的global.asa都會各自執行,當然執行的代碼就不同了。不過如果裡面的代碼一樣,就令當別說。:) 

  所以你在請求不同目錄下頁面,將會導致不同的global.asa被執行。不同的變量被調用,不同的session id被建立....之前的有用的信息都被破壞了。 

  下面是詳細的解釋: 

  當你先浏覽子虛擬程序上的頁面(child virtual application),然後再去浏覽子虛擬程序的上一級的父虛擬程序(parent virtual root)的頁面。那些變量就會丟失、破壞。看下面的表格: 

  請求 子程序1丟失 子程序2丟失 

  先請求Root 不會 不會 

  只在子程序1之前請求Root 不會 會 

  只在子程序2之前請求Root 會 不會 

  最後請求Root 會 會 

  有一個注冊表的鍵值(registry entry),叫CheckForNestedVroots(缺省為 1)。是設ASP是否去檢測其他目錄裡的global.asa文件。 

  假如一個頁面被請求,但是如果在這個被請求頁面的同一目錄裡沒有global.asa這文件,那麼asp就會去上級的目錄裡找。ASP設計就是這樣的。另一方面,假如application被請求的頁面是在root的話,而global.asa也在root,那麼ASP就會執行這個在root上的global.asa文件。沒有必要去找子目錄下的global.asa文件了。 

  Internet 服務管理器,可以把一個目錄設成虛擬的目錄,這樣的目錄是可以擁有自己的global.asa文件,當然Application_OnStart和Session_OnStart是少不了的(廢話)。 

  這是個例子。他們都有Global.asa 

  C:\InetPub\wwwroot <Home> 

  Global.asa 

  C:\InetPub\wwwroot\Test2 (Nested) 

  Global.asa 

  C:\InetPub\wwwroot\Test2\Test3 (Nested) 

  Global.asa 

  C:\InetPub\wwwroot\Test4 

  Global.asa 

  注意: 

  如果Global.asa文件web請求時是要求認證的話,那麼在Global.asa文件的Sessi on_onStart過程裡初始化的變量將會是空的。如果你的global.asa的權限真的是這樣設的話,那麼將會帶來很多的麻煩。例如你會見到這樣的錯誤信息: 

  Microsoft OLE DB Provider for ODBC Drivers error '80004005 [Microsoft][ODBC Driver Manager] Data source name not found and no def ault driver specifIEd /<web name>/<asp filename>.ASP, line xx 

  這就是因為Session_onStart裡面初始化的session變量是空的(根本就沒有初始化)。 

  另外:這個問題在win95上不存在。更准確的是說,像在FAT這樣的,沒有文件權限設置的文件系統裡,沒有這樣的問題。所以NT的NTFS是有這樣問題的但,win9 5,98的就沒有。 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved