`

http协议 cookie设置

    博客分类:
  • http
阅读更多

  在bs的架构中,浏览器作为客户端,与服务器之间通过session保持连接状态。以前面试的时候,经常被问及一个问题:浏览器禁止cookie时,服务器与客户端浏览器能否保持session连接?

 

   其实要完全回答正确这个问题,需要对cookie的作用有全面的了解。具体cookie的解释大家可以google一下。我以前一直有一个误解(估计很 多人都有),以为cookie就是一个文件,用来保存用户信息或者其他信息。如果这么认为的话,那么浏览器禁用cookie也就是不保存成文件而已,并不 影响浏览器与服务器交互。其实如果我们看看浏览器发出的http请求消息和服务器的http响应消息就一目了然了。

 

Http request:

GET /cluster/index.jsp HTTP/1.1

Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*

Accept-Language: zh-cn

User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)

Accept-Encoding: gzip, deflate

Host: localhost:8080

Connection: Keep-Alive

 

Http response:

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Set-Cookie: JSESSIONID=4918D6ED22B81B587E7AF7517CE24E25.server1; Path=/cluster

Content-Type: text/html;charset=ISO-8859-1

Content-Length: 377

Date: Tue, 02 Mar 2010 02:58:32 GMT

 

 

  这是我们打开浏览器后,第一次请求一个网址时的请求和响应消息(如果客户本地没有该网址的cookie)。首先看response消息,可以看到一行醒目 的字符串Set-Cookie: JSESSIONID=1363B650B295DE9494A33805F62BC5ED.server1; Path=/cluster。其实这行是在告诉客户端浏览器,把这段cookie保存下来,根据cookie的存活时间,这段cookie信息有可能只存 在在内存中,也可能保存到文件中。下面不关闭浏览器,再次请求同样的url,观察第二次的请求和响应消息:

 

Http request:

GET /cluster/user_details.jsp HTTP/1.1

Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*

Accept-Language: zh-cn

User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)

Accept-Encoding: gzip, deflate

Host: localhost:8080

Connection: Keep-Alive

Cookie: JSESSIONID=4918D6ED22B81B587E7AF7517CE24E25.server1

 

Http response

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Set-Cookie: JSESSIONID=4918D6ED22B81B587E7AF7517CE24E25.server1; Expires=Tue, 02-Mar-2010 22:15:38 GMT

Content-Type: text/html

Content-Length: 252

Date: Tue, 02 Mar 2010 05:35:38 GMT

 

  这个时候注意看请求信息中多了一行Cookie,浏览器将这个Cookie信息传递给服务器,这次服务器返回的Set-Cookie中的JSESSIONID就和请求的JSESSIONID一致了。

 

  通过这两次实验,总结出以下几点:

  1.session是什么?session其实是在无状态会话的http协议下,为了实现有状态会话而设计的一种实现方法。

2.如何实现session会话?简单的说,就是在服务器端创建session对象,记录会话信息,同时在客户端与服务器的交互过程中,通过 JSESSIONID字符串唯一标识session对象(客户端只需要保存JSESSIONID这个字符串,服务器端只需要保存JSESSIONID和真 实的session对象之间的关联关系),而这个JSESSIONID字符串就是通过http协议的cookie功能实现的。

  3.浏览 器禁用cookie时会发生什么?浏览器禁止了Cookie,那么第二次请求中将不包含有Cookie信息(当然更不存在JSESSIONID信息),服 务器也就不会收到JSESSIONID的值,于是服务器认为是新请求,又创建一个服务器session,同时将本次生成的JSESSIONID再次通过响 应信息中的Set-Cookie返回给客户端。如此循环交互,服务器将永远认为该客户浏览器的请求是新请求,因此无法实现session功能。

 

 

   最后回到最初的那个面试问题:浏览器禁止cookie时,服务器与客户端浏览器能否保持session连接?当然可以,但是现在不能依靠浏览器自动完成 这个功能,而是需要服务器端通过重写URL的方法来实现,就是在返回的页面中,在URL里将JSESSIONID的值作为请求参数传递给服务器端,例 如<a href="">。

 

注意:JSESSIONID要大写,小写的服务器不认。

分享到:
评论

相关推荐

    HTTP协议、cookie、session超详细笔记整理,一篇就够了

    HTTP协议、cookie、session超详细笔记整理,一篇就够了

    HTTP Cookie 协议管理标准分析以及结构实现

    介绍Cookie的基本原理,服务器、客户端针对Cookie的使用; 讲述自己实现Cookie 管理器应该使用的方式,以及存储Cookie的结构说明。

    计算机后端-PHP视频教程. http协议11 http协议与cookie.wmv

    计算机后端-PHP视频教程. http协议11 http协议与cookie.wmv

    HTTP协议分析报告

    设置过滤规则:udp.port==53||tcp.port==80.(HTTP协议默认使用传输层TCP协议的80端口),考虑到我的电脑未能连网,所以选择老师抓好的包做实验分析。 (2) 分析HTTP协议报文。 (2) 第一阶段:TCP建立连接阶段。...

    对Cookie及http协议的理解

    目录一、HTTP协议二、Cookie1.Cookie概念2.Cookie特点3.Cookie使用①添加②读取③修改④失效⑤删除⑥设置域名、路径 一、HTTP协议  1、HTTP协议,即超文本传输协议(HyperText Transfer Protocol)是互联网上应用...

    HTTP协议调试器

    中文:HTTP协议调试器英文:Http/Https Protocol Debuger版权:电猫工作室(EMouze)1.支持HTTP和HTTPS(SSL加密)网络协议的跟踪和调试。2.可以查看到HTTP/HTTPS协议连接的详细过程和返回结果。3.允许GET/POST/HEAD/PUT...

    cookie&amp.pdf

    深入理解Servlet/JSP之“Cookie和Session原理” 由于HTTP协议的无状态特征,Web应用中经常使用Cookie和Session来保存用户在与系统交互过程中的状态数据。下面通过分析HTTP协议对Cookie和Session的工作原理加以了解。

    Fiddler是一个http协议调试代理工具

    Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。 Fiddler 要比其他的网络调试器要更加简单...

    session和cookie

    众所周知,http协议是一个无状态协议,简单来说就是,web服务器是不知道现在连接上来的人到底是哪个人,为了满足选择性发送信息的需求,在http的基础上做了很多扩展来达到这个目的,如数字签名、cookie、session等。

    手写Http服务器,已实现http基础协议、参数接受、servlet、filter、cookie、多文件上传等 支持NIO

    一款轻量化Http服务器。支持bio、nio两种模式。归属Coody Framework下。手写Http服务器,已实现http基础协议、参数接受、servlet、filter、cookie、多文件上传等。支持NIO。

    http协议学习系列

    包括如下章节,不可多得的学习资料 ...3.1 Cookie和Session 22 3.2 缓存的实现 25 3.3 断点续传和多线程下载的实现 26 3.4 https通信过程 27 3.5 http代理 29 3.6 虚拟主机的实现 30 附录:参考资料 31

    Web应用安全:HTTPCookie的作用.pptx

    由于 HTTP 协议的无状态性,服务器端不能保存客户端的状态。但是,在应用程序中,保持客户端的状态却是相当常见的需求。 比如,在线购物网站中的“购物车”就是一个典型的案例。购物车记住了用户在哪些商品上点击了...

    为多个域设置cookie。「Set cookie for several domains」-crx插件

    这个简单的应用程序是为一个目的而设计的——为多个域设置一个cookie。...-Cookie适用于协议http和https; -从所有域中删除Cookie。 -域记录(如果您输入了带有协议和uri的完整网址); 支持语言:English

    HTTP协议调试工具HttpDebug

    一款小的HTTP调试工具。HttpDebug HTTP协议调试工具 可以自定义Cookie、Post数据甚至是整个HTTP请求头,用作开发WEB、WEB应用软件的调试很不错

    php session和cookie使用说明

    PHP在http协议的头信息里发送cookie, 因此setcookie() 函数必须在其它信息被输出到浏览器前调用,这和对header() 函数的限制类似。1.1 设置cookie: 可以用setcookie() 或setrawcookie() 函数来设置cookie。也可以...

    HTTP协议捕捉分析的工具(HTTPAnalyzer)v7.5.3.455官方汉化安装版

    HTTP Analyzer是一款IE集成插件,可以实时捕捉HTTP/HTTPS 协议数据,可以显示许多信息(包括:文件头、内容、Cookie、查询字符窜、提交的数据、重定向的URL地址),可以提供缓冲区信息、清理对话内容、HTTP状态信息...

    cookie的secure属性详解

    当secure属性设置为true时,cookie只有在https协议下才能上传到服务器,而在http协议下是没法上传的,所以也不会被窃听。 简单实践一下,chrome浏览器打开https://www.baidu.com和http://www.baidu.com,分别打开...

    浅显易懂的cookie的使用(设置和获取cookie缓存)

    那这些都是怎么实现的呢,答案就是今天的主角cookie了,Cookie是由HTTP服务器设置的,保存在浏览器中,但HTTP协议是一种无状态协议,在数据交换完毕后,服务器端和客户端的链接就会关闭,每次交换数据都需要建立新的...

    http协议工具

    Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件,这些都可以让你胡乱修改的意思)。...

    基于http协议的服务器代码

    基于http协议的服务器代码(多线程版+cookie+上传图片+临时重定向+指定路径访问)

Global site tag (gtag.js) - Google Analytics