国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > ASP > 正文

負載平衡環境下的ASP會話管理(1)

2019-11-18 22:19:31
字體:
來源:轉載
供稿:網友
創建交互式web 頁面時最大的挑戰之一是維持用戶的狀態,一個站點也許想記住你是誰、在n頁之前你點擊了什么、在這最
后一次做了些什么、現在馬上要向你顯示什么。實現這些功能的途徑有許多,如查詢字符串、提交表單或cookies,最強大
的一種是aspsession 對象。
原文出處:http://www.asptoday.com/articles/20000118.htm      當用戶第一次到達某站點,他/她被給予一個HTTP
cookie格式的SessionID (是一個只讀屬性,
為每個用戶返回session 識別號)。然后服務器可以在session 集合中跟蹤一整群的變量,通過
與用戶的session cookie相匹配來保持每個用戶有一個特定變量。只要用戶在服務器上保持活躍,
session 變量就維持它的狀態。一個session 變量的默認有效時間是20分鐘,或者是每當用戶關閉
瀏覽器,這時無論session_OnEnd 部分是什么內容,global.asa 文件都運行。


       以上陳述的關鍵是“在服務器上保持激活狀態”。每個session變量都在網絡服務器上設置,并保持在
本地內存中。所以,如果你在一個web 范圍內使用負載平衡怎么辦?(負載平衡的介紹請見
msdn 文章 ‘ASP and Web Session Management’)。對真正的負載平衡來說,每當居住于服務器
上的用戶點擊一個連接時,它就改變服務器的狀態,每當瀏覽一個新頁面時都潛在地丟失他們的
session 信息。

       如果你發現自己是在這樣的環境下編寫代碼--或者你懷疑你的站點最終是負載平衡的--你有4種方法
來解決這個問題。

   ○ 完全不使用session 。
   ○ 使用臨時cookies 。
   ○ 購買第三方組件來處理session 管理。
   ○ 僅對web 范圍內的第一次點擊進行負載平衡。

       本文將討論這四種選擇,并解釋它們分別在何時何地最適用。

      根本不使用sessions

       顯然,饒過sessions 管理這個問題的一個途徑就是根本不使用sessions 變量。但是你仍然受困于
狀態保持的問題。你可以使用最簡單的方法跟蹤用戶,而不用寫客戶機。

       一種不安全的方法是使用瀏覽器查詢字符串,或用隱藏值進行表單置入,以使用戶保持活躍狀態。
這將允許你給他們一個用戶id,并將變量存儲在一個所有的web服務器都能到達的地方。比如說
我保持了變量 ShipToZipCode、 TypeOfCustomer和 CustomerEmail??梢赃@樣寫:

< form action="/nextpage.asp" method="post" >
Item Number: < input type=text name="ItemNumber" >< br >
Quantity: < input type=text name="Quantity"  >< br >
Unit Cost:< input type=text name="UnitCost"  >< br >
< input type=hidden value="ABXXXKJR8JSDFI12KJIL2H75CX45X2" name="sessionid" >
< input type=submit value="post form" >
< /form >

        然后,在 nextpage.asp上, 可以做以下工作:

Set conn=Server.CreateObject(ADODB.Connection)
Set SessionRS = conn.execute("Select ShipToZipCode, TypeOfCustomer, _  CustomerEmail from TblSession where
SessionID =" & request.form("sessionid"))
ShipToZipCode = SesssionRs("ShipToZipCode")
TypeOfCustomer = SesssionRs("TypeOfCustomer")
CustomerEmail = SesssionRs("CustomerEmail")

        這樣通過將所有的"session" 信息存儲在數據庫中,可以使這三個變量在每一頁上都保持活躍。確保
用戶id的值很難猜到,這很重要。當訪問第一頁時,將分配給用戶的sessionID 存儲為用戶名。當用戶
離開這一頁時可以考慮清除這個數據,有效地重新生成ASP session 對象。這可以手工完成,或者用
一個限時程序將數周以上的記錄刪除。



使用臨時Cookies

         對于特別的非敏感數據,直接向客戶機中寫入信息是有意義的。比如說,如果我的站點只使用了一個
變量來跟蹤用戶的ZIP 碼來得到用戶在當地的交通記錄,那么以HTTP cookie的形式將用戶的ZIP碼
寫入他們的機器應該不會產生什么危害。因為你可以將cookie寫成瀏覽器關閉時失效,就可以使它們
模仿一個session 變量的功能,也可以使他們是持久的,好在用戶下一次訪問時記住他。

        用Request 對象Cookie 的值可以為服務器所用。請求Cookie 的值,然后將值帶進來。所以在我們上面
的例子中,可以這樣做:

ShipToZipCode = Request.Cookies("SessionCookie")("ShipToZipCode")
TypeOfCustomer = Request.Cookies("SessionCookie")("TypeOfCustomer")
CustomerEmail = Request.Cookies("SessionCookie")("CustomerEmail")

       你不得不把這些放置在每個頁面的頂部,但是如果用戶把三個cookies 都設置了,那么每一頁都可以
存取和使用這些用戶特定的變量。你還可以在一個cookie中設置三個變量,請看Ken Baumbach的文章
Cookie Basics with ASP,里面有設置變量的更多信息。

       如果你認為用戶可能在瀏覽器上使Cookie 無效,這種方法就不適用。但是越來越多的站點要求使用
cookies,web 用戶也越來越熟練了。有可能相對很少的用戶會使cookies無效,但是這要在執行
這一方法之前進行考慮。
       雖然上面的方法肯定能奏效,但是它們削弱了ASP的功能,因為它限制了其中一個關鍵組件--Session
對象的使用。要避免由負載平衡導致的這種限制,繼續使用sessions的一種方法是購買一個第三方
組件,可以比IIS更好地處理Session。

       在本文中,我不想比較各種第三方組件的優缺點。但是我聽說有一個組件工作得挺好,是SoftArtisans
提供的,叫做 SA-Session PRo。它使用NT文件系統存儲用戶的信息,整個網絡范圍內的服務器都可以
使用。其它第三方組件創建“session 引擎”把網絡服務器和session 管理器分離。這樣,每次用戶
都可以被重定向到相同的session 引擎,同時也對服務器本身的點擊進行負載平衡。

       另一個可選擇的第三方組件是Microsoft的成員服務器。它與Microsoft的站點服務器,它允許一個
站點處理狀態維護以外的問題。在Bill Pitzer的文章‘Moving your "Anonymous" visitors to
registered status using Site Server and Membership Directory Authentication’中有更多的
信息。

       由于ASP已經越來越成為企業級網絡應用程序的選擇,而負載平衡也成為這些應用程序成功的最大威脅,
在市場上會出現越來越多的第三方組件。ASP本身就是服務器對象或ActiveX組件,就是可以處理這些
插件的。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 龙江县| 武安市| 聂荣县| 荥经县| 凤庆县| 靖远县| 色达县| 柯坪县| 吉林市| 隆德县| 永昌县| 泾川县| 普洱| 清水县| 盈江县| 江陵县| 大同市| 柳林县| 中卫市| 红桥区| 五莲县| 嘉义县| 四子王旗| 绥宁县| 绍兴县| 清苑县| 泊头市| 桃园县| 津南区| 云和县| 安平县| 台湾省| 焦作市| 泰州市| 区。| 开江县| 南木林县| 武平县| 盐城市| 武平县| 象山县|