2010-04-14 194 views
2

我有一個經典的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上覆制並追蹤它。

+0

一種可能性是,由於會話變量存儲在客戶端瀏覽器餅乾等等取決於客戶cookie偏好設置您的變量不會得到存儲 – RobV 2010-04-14 16:02:46

+0

他們是??我以爲他們會被存儲在服務器上。這就是我決定明確使用會話變量而不是cookie的原因。吉茲。我討厭這個經典的東西。 – 2010-04-14 19:35:35

+0

@Mike:你的棍棒結局不對。 Rob所說的是,__identifies__會話的密鑰作爲cookie發送給客戶端。會話__is__的實際數據存儲在服務器端。 – AnthonyWJones 2010-04-14 21:08:07

回答

1

我看到一對夫婦場景中,這可能會發生:

第一基本上呼應@ RobV的評論,但要點是ASP會話依賴於存儲在瀏覽器客戶端上的cookie。因此,如果用戶來自關閉cookie的客戶端,則無法爲該客戶端檢索任何會話變量。

另一種情況是某些用戶會話可能超時。例如,假設用戶轉到設置會話變量的頁面(並且會話超時時間爲10分鐘)。然後,他們出去喝杯咖啡,或者陷入一次談話中。然後,用戶在30分鐘後點擊頁面上的鏈接,到那個時候會話被放棄。你可以嘗試增加會話超時時間,看看是否改善了情況。

一種解決方法是 - 而不是會話方法 - 檢查客戶端的referring url(HTTP_REFERRER),並查看它是否是您認爲是「本地報紙」的url。這可以說是更多的工作(並且一些瀏覽器無論如何都隱藏了引用者),但可能會產生更好的結果。哎呀,你可以嘗試兩種方法的組合:會話和推薦人。

+0

餅乾事情是一個真正的問題,因爲許多人關掉cookies,不是嗎?如果是這樣,那麼我無法控制這個問題,或者我必須想出另一種方式來堅持國旗,也許通過隱藏的領域(沒有Viewstate的經典,對吧?)。 REFERRER的想法也值得研究。 – 2010-04-14 19:43:48

+0

@Mike:持久性Cookie與易失性Cookie(又稱會話cookie)之間有很大區別。許多人阻止持久性cookies,但只有最偏執的塊會話cookie。如果這是一個cookie阻塞問題,它永遠不會工作,它有時不會工作。 – AnthonyWJones 2010-04-14 21:11:02

2

我與VPS服務器有同樣的問題。在經典的ASP中不能使用帶有會話變量的Web Garden。

進入IIS管理器 - 網絡Applicattion池和工作進程的數量更改爲1

如果你是在一個共享的主機詢問此配置或更改應用程序池與ohly一個工人。

更多信息: http://bytes.com/topic/asp-classic/answers/54826-asp-sessions-web-gardens

問候

www.imaginacolombia.com

+0

儘管如此,減少工作進程的數量會降低您在該服務器上的連接容量。如果您需要多個工作進程(「網絡花園」),則需要像Bytes文章中所建議的那樣進行DIY或第三方會話管理。 – markd 2011-10-07 01:03:42