负载平衡环境下的ASP会话管理(1)

2016-01-29 17:14 1 1 收藏

负载平衡环境下的ASP会话管理(1),负载平衡环境下的ASP会话管理(1)

【 tulaoshi.com - ASP 】

  创建交互式web 页面时最大的挑战之一是维持用户的状态,一个站点也许想记住你是谁、在n页之前你点击了什么、在这最
后一次做了些什么、现在马上要向你显示什么。实现这些功能的途径有许多,如查询字符串、提交表单或cookies,最强大
的一种是ASP的Session 对象。
原文出处: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 变量的功能,也可以使他们是持久的,好在用户下一次访

来源:http://www.tulaoshi.com/n/20160129/1500746.html

延伸阅读
标签: Web开发
一、使用 Contents 集合保存会话信息 1、Contents 集合是使用 Session 对象定义的在 ASP 应用程序中的一组变量。这些变量的作用域为用户层,并且在整个 ASP 应用程序中都是可用的。这是Session 对象默认的集合,因此下述两种格式是等价的: Session.Contents("变量名") Session("变...
处理会话变量(Session Variables) 作 者 : 雨晨 现存的ASP版的eVille禁止对站点的某些部分的访问,除非用户已经登录。一些功能像查看将来的优惠特价,报名上课,以及了解自己当前的入学状况是受限制区域。如果想在未登录的状态下访问这类区域,你只会被重新导回到登录页面。用户在一份表格中输入他们的用户名与密码,然后与数据库的...
作 者 : 雨晨 现存的ASP版的eVille禁止对站点的某些部分的访问,除非用户已经登录。一些功能像查看将来的优惠特价,报名上课,以及了解自己当前的入学状况是受限制区域。如果想在未登录的状态下访问这类区域,你只会被重新导回到登录页面。用户在一份表格中输入他们的用户名与密码,然后与数据库的学生表进行比较,如果登录成功,一个...
摘要:本文档为在Debian GNU/Linux系统上安装 Java Development Kit (JDK/J2SDK) 的参考文档. 因为许可证的问题, 无法在Debian中直接提供SUN公司的Java 系统. 因此在此提供了安装Java的方法供您参考. 1. 获取 sun的JDK 可以选择从 Java官方下载: http://java.sun.com   或其它网站下载 JRE (J2RE) Java Runtime Environmen...
标签: 电脑入门
本文将为大家介绍在windows下做7层软负载做了一些分析,对负载这块有兴趣的你,可以来看看哦。其实所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;你对7层,有了浅显的印象吧,那大家有啥做7层软负载的经验可以讨论分享一下呢,当然最好是windows平台下的。 性能分析 1、 对外网的连接管理和协议解析使用http.sys...

经验教程

589

收藏

92
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部