如何保持http会话

 刚才面试被别人问到这个问题,不会。记录一下。

在HTTP的WEB应用中, 应用客户端和服务器之间的状态是通过Session来维持的, 而Session的本质就是Cookie, 简单的讲,当浏览器向服务器发送Http请求的时候, HTTP服务器会产生一个SessionID,这个SessionID就唯一的标识了一个客户端到服务器的请求会话过程。

为了保持这个状态, 当服务端向客户端回应的时候,会附带Cookie信息,当然,Cookie里面就包含了SessionID客户端在执行一系列操作时向服务端发送请求时,也会带上这个SessionID, 一般来说,Session也是一个URL QueryParameter ,就是说,session可以以Key-Value的形式通过URL传递。比如,http://www.51etest.com/dede/login.php?PHPSESSIONID=7dg3dsf19SDf73wqc32fdsf
一般而言,浏览器会自动把此Session信息放入Header报文体中进行传递。如果浏览器不支持Cookie,那么,浏览器会自动把SessionID附加到URL中去。

哈哈,Session信息中放在Header报文体中的,我点击人人网上的“好友”链接,看看页面的request和response的http头部是什么:

Response Headers

Cache-Control no-cache
Connection keep-alive
Content-Encoding gzip
Content-Type application/x-javascript; charset=utf-8
Date Wed, 07 Mar 2012 13:15:36 GMT
Expires Wed, 07 Mar 2012 13:15:35 GMT
Server nginx/0.8.54
Set-Cookie an_slot=3555; path=/ebpn
Transfer-Encoding chunked


Request Headers

Accept */*
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Connection keep-alive
Cookie an_slot=3554; _r01_=1; ick=7f9a8e6a-8f3c-4f09-b819-f4a02c6e41bf; _de=E66E3FF6EBCA21E3757173A867DCB561696BF75400CE19CC; p=fbd97453bed0f738d2e166e4edaac7117; ap=322837427; first_login_flag=1; t=7a870c82d2a425ec3627ec81ef40c2997; societyguester=7a870c82d2a425ec3627ec81ef40c2997; id=322837427; xnsid=12b3b8d6; loginfrom=null; depovince=HUB; jebecookies=d93ab225-a088-4432-8014-0cfb0484f3ba|||||
Host ebp.renren.com
Referer http://friend.renren.com/myfriendlistx.do
User-Agent Mozilla/5.0 (Ubuntu; X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0

 

注意上面那个id=322837427是什么意思,事实上http://www.renren.com/322837427就是我的人人网主页。似乎没有看到sessionID,只是response的an_slot比request的an_slot加了个1。

同时我们也看到人人网用的web服务器是Nginx,它是Apache不错的替代品,其源代码使用2-clause BSD-like license。Nginx还是优秀的反向代理和邮件代理服务器。Nginx使用C语言编写,采用epoll and kqueue作开发模型,支持高达50,000个并发连接的响应。

 

百科了一下什么叫“反向代理服务器”。

通常的代理服务器, 只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由 于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet 上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机,访 问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而 不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理 服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。

反向代理方式和包过滤方式或普通代理方式并无冲突,因此可以在防火墙设备中同时使用这两种方式,其中反向代理用于外部网络访问内部网络时使用,正向代理或包过滤方式用于拒绝其他外部访问方式并提供内部网络对外部网络的访问能力。因此可以结合这些方式提供最佳的安全访问方式。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在HAProxy中进行会话保持可以通过使用Cookie或基于源IP的方法来实现。 1. 使用Cookie进行会话保持:HAProxy可以通过在响应中设置Cookie来实现会话保持。当客户端发送请求时,HAProxy会检查请求中是否包含有效的会话Cookie。如果存在,它将根据Cookie的值将请求路由到相应的后端服务器。如果不存在,HAProxy可以选择一个后端服务器,并在响应中设置一个新的会话Cookie,以便客户端在后续请求中使用。 以下是一个示例配置: ``` frontend my_frontend bind 0.0.0.0:80 mode http default_backend my_backend backend my_backend mode http balance roundrobin cookie JSESSIONID prefix server backend1 192.168.0.1:8080 cookie server1 server backend2 192.168.0.2:8080 cookie server2 ``` 在上述配置中,HAProxy使用名为"JSESSIONID"的Cookie来进行会话保持。"cookie"关键字指定了Cookie的名称,并使用"prefix"参数表示Cookie值由HAProxy自动生成。 2. 使用基于源IP的方法进行会话保持:另一种常见的方法是基于源IP的会话保持。HAProxy可以根据客户端的源IP地址将请求路由到同一台后端服务器,从而实现会话保持。这种方法适用于无状态的应用,其中会话信息不需要存储在后端服务器上。 以下是一个示例配置: ``` frontend my_frontend bind 0.0.0.0:80 mode http default_backend my_backend backend my_backend mode http balance source server backend1 192.168.0.1:8080 server backend2 192.168.0.2:8080 ``` 在上述配置中,"balance source"指示HAProxy使用源IP地址进行负载均衡,并实现会话保持。 无论使用哪种方法,都可以根据具体需求进行配置。请注意,会话保持可能会增加服务器的负载和复杂性,因此需要根据实际情况进行权衡和调优。 希望能对你有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值