如何利用服务器下发的Cookie实现基于此Cookie的会话保持
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的会话保持的更多相关文章
- 利用XtraBackup给MYSQL热备(基于数据文件)
利用XtraBackup给MYSQL热备(基于数据文件) By JRoBot on 2013 年 11 月 26 日 | Leave a response 利用XtraBackup给MYSQL热备(基 ...
- 【转存】阿里云服务器下 LAMP 环境配置 —— 基于 CentOS 6.3
阿里云服务器下 LAMP 环境配置 —— 基于 CentOS 6.3 Posted on 2016年2月10日 by 学院君 1.Apache 配置 —————————————————– vi / ...
- 在Linux(CentOS 6.6)服务器上安装并配置基于Apache的SVN服务器
#!/bin/bash # # 在Linux(CentOS 6.6)服务器上安装并配置基于Apache的SVN服务器: # # .安装服务 # .创建svn版本库 # .创建svn用户 # .配置sv ...
- Ajax实例一:利用服务器计算
Ajax实例一:利用服务器计算 HTML代码 //输入两个数 <input id="number1" type="number"> <inpu ...
- GPRS以TCP上传数据到服务器OK,但收不到服务器下发的数据
GPRS以TCP上传数据到服务器OK,但收不到服务器下发的数据 基站漂移是DTU很常见的连接故障,一个DTU所处的地方可能会有多个基站信号,时间久了,可能会在不同的基站之间切换,它会更新自己的连接,发 ...
- Cookie的使用、Cookie详解、HTTP cookies 详解、获取cookie的方法、客户端获取Cookie、深入解析cookie
Cookie是指某些网站为了辨别用户身份.进行session跟踪而存储在用户本地终端上的数据(通常经过加密),比如说有些网站需要登录才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我 ...
- 浅谈 php 采用curl 函数库获取网页 cookie 和 带着cookie去访问 网页的方法!!!!
由于近段时间帮朋友开发一个能够查询正方教务系统的微信公众平台号.有所收获.这里总结下个人经验. 开讲前,先吐槽一下新浪云服务器,一个程序里的 同一个函数 在PC测试可以正常运行,在它那里就会挂的 ...
- JMeter学习-012-JMeter 配置元件之-HTTP Cookie管理器-实现 Cookie 登录
前文我们讲过了若何获取登录后的 Cookie 信息,不知如何获取登录 Cookie 的朋友,敬请参阅我之前写的博文:Fiddler-005-获取 Cookie 信息.参阅上篇文章,获取到 Cookie ...
- Introduction and use of Cookie and Session(Cookie&Session的介绍和使用)
一.Cookie 1.什么是Cookie? Cookie是HTTP协议的规范之一,它是服务器和客户端之间传输的小数据. 首先由服务器通过响应头把Cookie传输给客户端,客户端会将Cookie保存起来 ...
随机推荐
- SOA体系结构之基础培训教程-大纲篇
引言: 最近受邀做了一个企业的SOA体系结构的内训,本文是内训课程的培训大纲,分享一下吧,希望大家能够喜欢.同时也想针对大纲中列出的内容对SOA架构体系做一次回顾,如果时间允许把完整的课件也想放上来共 ...
- (转载)myeclipse项目名称重命名
myeclipse项目名称重命名 实例1 今天晚上在做一个jsp唱片显示的实例,myeclipse项目名称原本想写music结果写成了musci.这就需要项目名称的重命名,单纯的使用 “重构--> ...
- display_errors & error_reporting(php调试安全)
这两个选项对应的值即都可以在php.ini文件中设置,也都可以在php代码中使用相应的函数来设置. 在php.ini文件中的设置如下:
- Winform中修改WebBrowser控件User-Agent的方法(已经测试成功)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- Hadoop书籍汇总
<Hadoop实战>陆嘉恒 <Hadoop - The Definitive Guide>Tom White,中文版<Hadoop权威指南> <Hadoop技 ...
- 解决 TortoiseGit 诡异的 Bad file number 问题
http://blog.csdn.net/renfufei/article/details/41648061 问题描述 昨天,以及今天(2014-11-29),使用 TortoiseGit 时碰到了一 ...
- Java 读取Properties 配置文件
方法一,使用 io 包中的 BufferedInputStream 以及 FileInputStream读入文件转成字符流,然后使用 lang 包中 的 Properties 的 load 方法进行读 ...
- sql 嵌套事务学习笔记
以下内容根据此官方文档修改:http://technet.microsoft.com/zh-cn/library/ms189336(v=sql.105).aspx 嵌套事务的使用场景或者说目的主要是为 ...
- SQL Server 损坏修复
目录: 一. 常见错误解读 二. DBCC CHECKDB 三 .不同部位损坏的应对 四. Database Mirroring和AlwaysOn的页面自动修复功能 一 常见错误解读 SQL Serv ...
- CI笔记6 json 传值
CI3.x 使用json,配合easyui, 其实很简单,走了很多的弯路, 首先在ci的控制器重,建立2个方法,一个用于显示加载view,一个用于echo json,就可以了. 需要注意的是,在ci的 ...