Cookie是一种在客户端保持HTTP状态信息的常用技术,基于Cookie的会话保持常常出现在很多AX的部署案例中,尤其是涉及电子交易的系统部署中。此类系统往往要求负载均衡设备按照服务器下发的Cookie值实现会话保持。大致的工作流程如下:

1. 当客户进行第一次请求时,客户HTTP请求(不带cookie)发送到负载均衡设备, 负载均衡设备根据负载均衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器在HTTP回复的Header中执行set-cookie的动作,将包含服务器端cookie的回复数据包发回负载均衡设备;

2. 负载均衡设备会根据服务器回复的Cookie值,在自身会话保持表中查询,如果表中没有相同的Cookie值记录,那么将此Cookie值作为会话保持的“Key”值,将此次会话添加到会话保持表中;并将带有服务器插入cookie值的HTTP回复返回到客户端;

3. 当客户请求再次发生时,客户将带有上次服务器cookie的HTTP请求发送到负载均衡设备,之后负载均衡设备根据会话保持表中该cookie值的会话保持记录,将HTTP请求(带有与上面同样的cookie)发到会话保持中表记录的服务器;

4. 后端服务器进行请求回复。

5. 如此循环,只要在会话保持表中的空闲保持时间(Age)递减到0之前,客户端发送带有相同Cookie值的HTTP请求,负载均衡设备始终会将这些请求分配到相同的服务器上。

AX设备实现此功能目前是通过一个比较简单的aFlex脚本执行的。类似这样的一个脚本:

双击代码全选

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

when HTTP_REQUEST {                                       ##当发生HTTP请求事件时

set key ""                                                               ##设置变量“key”值为空

if { [HTTP::cookie exists "JSESSIONID"] } {

##判断HTTP header中是否有名为“JSESSIONID”的Cookie

set key [HTTP::cookie "JSESSIONID"]

##如果有此Cookie,将其值赋予变量”key”中

persist uie $key 300

##并按照此变量值执行persist uie的会话保持动作,会话保持的空闲超时时间(age)为300秒

}  else {

set key [IP::remote_addr]

##如果HTTP header中没有名为“JSESSIONID”的Cookie,则将客户端源IP赋予变量“key”

persist uie $key 300                                     ##按照源IP地址执行会话保持

}

}

when HTTP_RESPONSE {

##当发生HTTP应答事件时(即接收到服务器的应答请求时)

if { $key ne "" } {                                                   ##如果变量"key”值不为空

set p [ persist lookup uie $key ]

##则在会话保持表中查询是否已存在该"key”值的会话保持记录,并将返回结果保存在变量“P”中

if { $p eq "" } {

##如果该变量值为空,即会话保持表中没有查询到该"key”值的会话保持记录

persist add uie $key 300

##将该"key”值,即将包含此Cookie值的会话添加到会话保持表中

}

}

}

在不同的应用场景,我们可以根据应用服务器下发的不同名称的Cookie来执行会话保持,只需要修改脚本中的判断条件,在HTTP header中判断是否存在对应的Cookie,从而以此Cookie执行会话保持。

S.G

本文出自 “ADC技术博客” 博客,请务必保留此出处http://virtualadc.blog.51cto.com/3027116/741435

如何利用服务器下发的Cookie实现基于此Cookie的会话保持的更多相关文章

  1. 利用XtraBackup给MYSQL热备(基于数据文件)

    利用XtraBackup给MYSQL热备(基于数据文件) By JRoBot on 2013 年 11 月 26 日 | Leave a response 利用XtraBackup给MYSQL热备(基 ...

  2. 【转存】阿里云服务器下 LAMP 环境配置 —— 基于 CentOS 6.3

    阿里云服务器下 LAMP 环境配置 —— 基于 CentOS 6.3  Posted on 2016年2月10日 by  学院君 1.Apache 配置 —————————————————– vi / ...

  3. 在Linux(CentOS 6.6)服务器上安装并配置基于Apache的SVN服务器

    #!/bin/bash # # 在Linux(CentOS 6.6)服务器上安装并配置基于Apache的SVN服务器: # # .安装服务 # .创建svn版本库 # .创建svn用户 # .配置sv ...

  4. Ajax实例一:利用服务器计算

    Ajax实例一:利用服务器计算 HTML代码 //输入两个数 <input id="number1" type="number"> <inpu ...

  5. GPRS以TCP上传数据到服务器OK,但收不到服务器下发的数据

    GPRS以TCP上传数据到服务器OK,但收不到服务器下发的数据 基站漂移是DTU很常见的连接故障,一个DTU所处的地方可能会有多个基站信号,时间久了,可能会在不同的基站之间切换,它会更新自己的连接,发 ...

  6. Cookie的使用、Cookie详解、HTTP cookies 详解、获取cookie的方法、客户端获取Cookie、深入解析cookie

    Cookie是指某些网站为了辨别用户身份.进行session跟踪而存储在用户本地终端上的数据(通常经过加密),比如说有些网站需要登录才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我 ...

  7. 浅谈 php 采用curl 函数库获取网页 cookie 和 带着cookie去访问 网页的方法!!!!

    由于近段时间帮朋友开发一个能够查询正方教务系统的微信公众平台号.有所收获.这里总结下个人经验. 开讲前,先吐槽一下新浪云服务器,一个程序里的   同一个函数  在PC测试可以正常运行,在它那里就会挂的 ...

  8. JMeter学习-012-JMeter 配置元件之-HTTP Cookie管理器-实现 Cookie 登录

    前文我们讲过了若何获取登录后的 Cookie 信息,不知如何获取登录 Cookie 的朋友,敬请参阅我之前写的博文:Fiddler-005-获取 Cookie 信息.参阅上篇文章,获取到 Cookie ...

  9. Introduction and use of Cookie and Session(Cookie&Session的介绍和使用)

    一.Cookie 1.什么是Cookie? Cookie是HTTP协议的规范之一,它是服务器和客户端之间传输的小数据. 首先由服务器通过响应头把Cookie传输给客户端,客户端会将Cookie保存起来 ...

随机推荐

  1. 软件版本中的Alpha,Beta,RC,Trial是什么意思?

    版本号: V(Version):即版本,通常用数字表示版本号.(如:EVEREST Ultimate v4.20.1188 Beta ) Build:用数字或日期标示版本号的一种方式.(如:VeryC ...

  2. CentOS 6.7平台nginx压力测试(ab/webbench)

    压力测试工具一:webbench 1.安装 wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz tar zxvf w ...

  3. C# 的可空合并运算符(??)到底是怎样的宝宝?

    前言废语 也怪自己小白和不勤奋,没有系统的学习C#相关的东西,工作一年多还是初级小菜,深感不安,来到园子才发现好多钻研技术的人,也渐渐发现自己开始喜欢上了这个编程的世界.今日偶遇??操作符,发现我只看 ...

  4. php错误处理和异常处理

    PHP错误处理有两种:标准的错误处理和异常(OOP语法新出现的错误处理机制)

  5. in 与 = 的区别

    in 与 = 的区别   结果是相同的.

  6. List和ArrayList,LinkList的区别

    接口 List<E> 是一个接口: ArrayList<E> 是一个类:是一个实现了List接口的类,因此可以List里面定义的所有的方法都实现了. 1.ArrayList是实 ...

  7. [IO] C# DirFileHelper文件与文件夹操作类教程与源码下载 (转载)

    点击下载 DirFileHelper.zip 主要功能如下所示 // 摘要: // 向文本文件的尾部追加内容 // // 参数: // filePath: // 文件的绝对路径 // // conte ...

  8. oracle学习笔记4:PL/SQL

    PL/SQL是没命名的存储过程,函数,触发器,PL/SQL块的语法格式如下: [declare] --声明部分,可选 begin --执行部分,必须 [exception] --异常处理部分,可选 e ...

  9. T-SQL中的透视和逆透视

    透视 今天抽一点时间来看看透视和逆透视语句,简单的说就是行列转换.假设一个销售表中存放着产品号,产品折扣,产品价格三个列,每一种产品号可能有多种折扣,每一种折扣只对应一个产品价格.下面贴出建表语句和插 ...

  10. 给右键 添加dos命令

    reg add "HKEY_CURRENT_USER\Console" /v "ScreenBufferSize" /t REG_DWORD /d 655361 ...