Get与Post_Cookie与Session

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Get与Post_Cookie与Session

Http协议详解

1. HTTP的请求响应模型

HTTP协议是⼀个⽆状态的协议,同⼀个客户端的这次请求和上次请求是没有对应关系。(所以才有了Cookie和Session)HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:

这样就限制了使⽤HTTP协议,⽆法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

那么如何实现消息从服务器端主动推送给客户端呢?

1. 采⽤第三⽅推送,如百度云(或腾讯的信鸽推送)。服务器端把消息给第三⽅,第三⽅帮你把消息发给连接到他的并且订阅过你这个主题的客户端

2. 打开应⽤时向服务器发申请,其实还是客户端发起请求,只是这个请求是⾃动的,⽤户感觉不到

3. 如果应⽤⼀直打开,或者有后台服务,可以定时向服务器发申请

1.1请求:Request

服务器端request的从客户端传来的信息

1.2响应:Response

服务器端response给客户端处理之后的信息,都是以服务器端为主体的

2. GET与POST的差别(是以客户端为主体):

1. GET是客户端获取服务器端的资源(⽐如要从服务器上获取id=1234的数据的信息,就在url后http://.../id?1234)(⼀般将需要获取的资源加载URL后⾯,所以不安全,⽽且数

据量有限,只有1024B。但是执⾏效率⽐POST好)

2. POST是客户端发送给服务器端的资源(⽐如表单中的数值需要传送给服务器端进⾏处理)(这些数据⼀般html 的header⾥⾯,所以原则上没有⼤⼩的限制,当然,不能超过

header的容量)

3. GET有两个特性:安全性和幂等性

安全性意味着该操作⽤于获取信息⽽⾮修改信息。

幂等性意味着对同⼀ URL 的多个请求应该返回同样的结果。

换句话说,GET 请求⼀般不应产⽣副作⽤。从根本上讲,其⽬标是当⽤户打开⼀个链接时,她可以确信从⾃⾝的⾓度来看没有改变资源。⽐如,新闻站点的头版不断更新。虽然第⼆次请求会返回不同的⼀批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。

POST 请求就不那么轻松了。POST 表⽰可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对⽂章的注解应该通过POST 请求实现,因为在注解提交之后站点已经不同了(⽐⽅说⽂章下⾯出现⼀条注解)。

建议:

1、get⽅式的安全性较Post⽅式要差些,包含机密信息的话,建议⽤Post数据提交⽅式;

2、在做数据查询时,建议⽤Get⽅式(因为这是从服务器获取数据);⽽在做数据添加、修改或删除时,建议⽤Post⽅式(因为这是向服务器传送数据);

3. Cookie和Session

Cookie和Session都为了⽤来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP⽆状态的问题⽽所做的努⼒。

Session可以⽤Cookie来实现,也可以⽤URL回写的机制来实现。⽤Cookie来实现的Session可以认为是对Cookie更⾼级的应⽤。

3.1两者⽐较

Cookie和Session有以下明显的不同点:

1)Cookie将状态保存在客户端,Session将状态保存在服务器端;

2)Cookie因为保存在客户端,安全性较低;Session安全性较⾼;

3)Cookie不影响服务器性能,但是Session会影响

Session是针对每⼀个⽤户的,变量的值保存在服务器上,⽤⼀个JsessionID来区分是哪个⽤户。Session类似与Cache的Map,在有效期内不会被GC。

3.2 Session机制

session对象的信息保存在服务器中,但是ID保存在客户机的cookies中如果客户机不⽀持Cookies则转为URL重写,⼀般使⽤session对象时不必考虑其实现的细节问题。Session机制是⼀种服务器端的机制,服务器使⽤⼀种类似于散列表的结构(也可能就是使⽤散列表)来保存信息。

当程序需要为某个客户端的请求创建⼀个session的时候,服务器⾸先检查这个客户端的请求⾥是否已包含了⼀个 session id,如果已包含⼀个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使⽤(如果检索不到,可能会新建⼀个),如果客户端请求不包含session id,则为此客户端创建⼀个session并且⽣成⼀个与此session相关联的session id,session id的值应该是⼀个既不会重复,⼜不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。

当⽤户关闭某个Web服务器上所有的⽹页时,此服务器与客户机的session对象及其变量会⾃动消失

3.3Session的实现⽅式

下⾯的两种⽅式其实⼤同⼩异,⼀个是在cookie中加上这个sessionId,另⼀个实在每次的Url中加上sessionId。⽬的都是要客户端每次发信息给服务器的时候服务器都可以找到客户端对应的sessionId,从⽽找到对应的session

3.3.1 使⽤Cookie来实现

服务器给每个Session分配⼀个唯⼀的SessionID,并通过Cookie发送给客户端。(Cookie保存在Http的Header⾥⾯,整个Cookie是⼀个⽂件)

当客户端发起新的请求的时候,将在Cookie头中携带这个SessionID。这样服务器能够找到这个客户端对应的Session。

流程如下图所⽰:

3.3.2 使⽤URL回显来实现

URL回写是指服务器在发送给浏览器页⾯的所有链接中都携带JSESSIONID的参数,这样客户端点击任何⼀个链接都会把JSESSIONID带会服务器。

所以禁⽤cookie,session依然可以使⽤url回显来实现

3.4在J2EE项⽬中Session失效的⼏种情况

1)Session超时:Session在指定时间内失效,例如30分钟,若在30分钟内没有操作,则Session会失效,例如在web.xml中进⾏了如下设置:

相关文档
最新文档