• 转:session的使用与性能:负载平衡环境下的ASP会话管理


    来自:http://www.jz006.com/dev/asp/zh/20091221/8469.html

    创断交互式web 页面时最大的挑战之一是保持用户的形态,一个站点也许想记住你是谁、在n页之前你点击了什么、在这最初一次做了些什么、如今立即要向你显现什么。完成这些功能的道路有许多,如查询字符串、提交表单或cookies,最强大的一种是ASP的Session 对象。 

    当用户第一次到达某站点,他/她被给予一个HTTP cookie格式的SessionID (是一个只读属性, 为每个用户前往session 辨认号)。然后效劳器能够在session 集合中跟踪一整群的变量,经过 
    与用户的session cookie相婚配来保持每个用户有一个特定变量。只需用户在效劳器上保持活泼, session 变量就保持它的形态。一个session 变量的默许有效工夫是20分钟,或者是每当用户关闭阅读器,这时不管session_OnEnd 部分是什么内容,global.asa 文件都运转。 


    以上陈述的关键是“在效劳器上保持激活形态”。每个session变量都在网络效劳器上设置,并保持在 
    外地内存中。所以,假如你在一个web 范畴内使用负载平衡怎样办?对真正的负载平衡来说,每当居住于效劳器 
    上的用户点击一个连接时,它就改变效劳器的形态,每当阅读一个新页面时都潜在地丢失他们的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组件,就是能够处理这些
    插件的。 
  • 相关阅读:
    一起谈.NET技术,SharePoint开发笔记SharePoint2010添加ASP.NET应用程序 狼人:
    一起谈.NET技术,系统架构技能之设计模式—代理模式 狼人:
    一起谈.NET技术,.NET中的异步编程(一)为什么需要异步 狼人:
    一起谈.NET技术,Microsoft NLayerApp案例理论与实践 项目简介与环境搭建 狼人:
    一起谈.NET技术,构建高性能ASP.NET站点之减少不必要的请求 狼人:
    一起谈.NET技术,分享在MVC3.0中使用jQuery DataTable 插件 狼人:
    一起谈.NET技术,ASP.NET 4的Demo实践:URL路由改进支持 狼人:
    一起谈.NET技术,构建高性能ASP.NET站点之优化HTTP请求 狼人:
    一起谈.NET技术,Silverlight 游戏开发小技巧:传说中的透视跑马灯 狼人:
    paip.Winista HTMLParser文本结点的获取
  • 原文地址:https://www.cnblogs.com/songsh96/p/1862153.html
Copyright © 2020-2023  润新知