我有一個經典的ASP網站我維護,最近我們想要做特殊的渲染動作,如果訪客來自一個特定的網站集。因此,在這些遊客都來通過去我們的網站的頁面,我把一個簡單的線設置會話變量:ASP經典會話變量不總是得到設置
<!-- #include virtual="/clsdbAccess.cs"-->
<%
set db = new dbAccess
%>
<html>
<head>
...
<script language="javascript" type="text/javascript">
...
</script>
</head>
<body>
<%
Session("CAME_FROM_NEWSPAPER") = "your local newspaper"
...
%>
... html stuff ...
</body>
</html>
於是,在所有的頁面,每當我需要忍受導航鏈接,菜單等,我們不想向這些訪客展示,我測試會話變量是否爲「」,然後進行相應的渲染。
我的問題是,它似乎在開發中對我非常有用,然後我將它發佈到Production中,並且它有時很棒,而其他時間它根本不起作用。有時會話變量被設置,有時不會。其他一切都很好。但是,我們的客戶在向他們的訪問者呈現的頁面上看到了不一致的結果,這是一個問題。我試過從不同的PC上登錄,我確認我得到了不同的,不可預測的結果。問題是我無法隨意複製它,而且我無法排除故障/跟蹤生產。
現在我已經解決了這個問題,只需創建具有特殊渲染的重複頁面,並確保這些訪問者去那裏。但這是一種破解,最終難以維持。
Classic ASP中的會話變量有什麼特別或不一致的地方嗎?有沒有更好的方法來解決這個問題? TIA。
更新 我發現當您第一次通過該頁面訪問該網站時,會話變量未被設置。菜單和一切(應該不會出現在這些情況下)首次顯示。然後,如果您返回並刷新登錄頁面,請再次瀏覽至同一頁面,此時它可以正常工作,然後再次瀏覽。然後,我去了並刪除了所有的緩存,cookies等等,然後再次登錄頁面,進入我的頁面:Bam,菜單(即沒有會話變量)。我創建了一個頁面,「sessionvars.asp」,其中顯示了該var的內容,果然,它是空白的。至少現在我可以隨意重現問題了,我應該可以在Dev上覆制並追蹤它。
一種可能性是,由於會話變量存儲在客戶端瀏覽器餅乾等等取決於客戶cookie偏好設置您的變量不會得到存儲 – RobV 2010-04-14 16:02:46
他們是??我以爲他們會被存儲在服務器上。這就是我決定明確使用會話變量而不是cookie的原因。吉茲。我討厭這個經典的東西。 – 2010-04-14 19:35:35
@Mike:你的棍棒結局不對。 Rob所說的是,__identifies__會話的密鑰作爲cookie發送給客戶端。會話__is__的實際數據存儲在服務器端。 – AnthonyWJones 2010-04-14 21:08:07