在asp 應用程式中,常用到Session 物件來保存使用者臨時私有數據,而asp 的Session 物件是依賴瀏覽器的Cookie 的,如果使用者出於安全原因或無意中關閉了Cookie 選項,則asp 將無法正確識別用戶,最終導致Session 物件無法正常使用。
要正確執行以後的程序,就要先識別客戶程式是否接受Cookie,然而瀏覽器並沒有提供識別Cookie 是否關閉的方法,這樣就需要我們自己來想辦法進行測試。
於是許多開發人員就紛紛用自己的方法來測試瀏覽器的Cookie 狀態,最常見的方法就是在一個頁裡面送出一個Cookie,然後在另一個頁面中測試此Cookie 是否存在。這樣以來,我們就需要兩次asp 請求。
我這裡介紹的是一種結合伺服器腳本與客戶端腳本,一次測試瀏覽器狀態的方法。
在NetBox 第一次初始化asp 程式時,將分配一個新的Session 對象,並向客戶端送出一個以Application.ApplicationID 為名稱的Cookie,瀏覽器如果接受Cookie,則下次造訪時將回送此Cookie,NetBox伺服器接受到此Cookie 以後,將選用其指定的Session 物件作為此次asp 請求的Session 物件使用,以確保Session 物件針對特定使用者的唯一性和持久性。
由此我們知道,可以透過判斷瀏覽器是否接受了Application.ApplicationID 為名稱的Cookie 來判斷能否繼續下面的程式。而判斷瀏覽器是否含有某個Cookie,則可是使用瀏覽器的cookie 物件來完成。下面這段程式碼就是測試瀏覽器是否接受了NetBox 的Session:
<html>
<body>
<Script language="javascript">
if(document.cookie.search("<%=Application.ApplicationID%>=") == -1)document.write("Not ");
</Script>Allow.
</body>
</html>
這段程式碼的前提是知道NetBox 送出的Cookie 的名稱。如果希望在iis 中使用此段程式碼,則比較困難,因為iis 每次啟動後送出的Cookie 的名稱都是不同的,所以為了測試,可以自行送出一個Cookie 然後再進行測試:
<%Response.Cookie( "CookieCheck")="on"%>
<html>
<body>
<Script language="javascript">
if(document.cookie.search("CookieCheck=") == -1)document.write("Not ");
</Script>Allow.
</body>
</html>