在 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>