`

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 协议管理标准分析以及结构实现

    ### HTTP Cookie 协议管理标准分析以及结构实现 #### 基本原理及作用 Cookie是一种小型的数据存储机制,主要用于在网络应用中...开发者需要关注HTTP协议中有关Cookie的规范,并根据实际需求合理设计Cookie管理逻辑。

    cookie设置httpOnly和secure属性实现及问题

    - **定义**: 如果Cookie设置了`httpOnly`属性,那么该Cookie只能通过HTTP协议进行访问,即JavaScript等客户端脚本无法读取到Cookie信息。 - **作用**: 防止通过客户端脚本(如JavaScript)进行的跨站脚本攻击(XSS)。...

    Dubbox跨域请求、Cookie设置

    【标题】"Dubbox跨域请求、Cookie设置"所涉及的知识点主要集中在分布式服务框架Dubbo的跨域问题处理和Cookie的配置上。Dubbox是阿里巴巴开源的一个基于Dubbo的扩展,提供了更多的特性,如REST支持、Zookeeper注册...

    android cookie获取和设置,webView的cookie的同步

    ### Android Cookie 获取与设置以及 WebView 的 Cookie 同步 在 Android 开发中,Cookie 的管理和同步对于维护用户会话状态至关重要。特别是在使用 HttpClient 发起网络请求时,保持客户端与服务器端 Session 的...

    通过js来设置cookie和读取cookie,实现登陆时记住密码的功能

    设置cookie主要涉及以下几个步骤: 1. 创建一个键值对对象,例如`{key: 'username', value: 'JohnDoe'}`。 2. 将对象转换为字符串,以便在HTTP头部中发送。可以使用`encodeURIComponent`函数对键和值进行编码,防止...

    根据http获取cookie内容代码

    总之,获取HTTP报文头中的Cookie内容涉及HTTP协议的理解、网络库的使用(或自定义实现)以及报文头的解析。通过学习和实践,你将能够熟练地在C++中处理网络通信中的Cookie管理,从而更好地开发Web应用程序或服务。...

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

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

    cookie读写,子cookie

    这个过程使得服务器能够识别和跟踪用户,即使在无状态的HTTP协议下也能实现状态保持。 **Cookie的读取与写入** 在Java中,我们可以使用HttpServletResponse和HttpServletRequest接口来操作Cookie。写入Cookie的...

    易语言取设cookie

    Cookie是在HTTP协议下,服务器发送到用户浏览器并保存在本地的一小块数据,它用于记录用户的浏览历史、登录状态等信息。在易语言中,处理Cookie主要有两个关键函数:`InternetSetCookieA` 和 `InternetGetCookieA`。...

    C#cookie实现历史记录

    它们主要用于跟踪用户会话、保存用户偏好设置以及在无状态的HTTP协议中维护用户状态。在C#中,我们可以使用`System.Web.HttpCookie`类来操作Cookie。 1. **创建Cookie** 创建Cookie的基本步骤如下: - 创建一个`...

    Cookie浏览器

    Cookie浏览器是一种特殊的网络浏览工具,它利用了HTTP协议中的Cookie技术来实现特定功能,如网页登录绕过和邮箱免登录。Cookie是Web服务器在用户浏览器上存储的一小段数据,用于识别用户身份、保持登录状态、个性化...

    HTTP协议.zip_HTTP_HTTP协议

    4. **响应头**: 服务器的响应也会包含响应头,如Server标识服务器类型,Content-Type表示响应内容的MIME类型,Set-Cookie用于设置或修改cookie。 5. **实体主体**: 请求和响应都可以包含实体主体,用于传输数据。...

    认清http协议本质

    要认清HTTP协议的本质,我们需要从以下几个关键点入手: 1. 请求与响应模型:HTTP通信基于请求-响应模型。客户端发起一个HTTP请求到服务器,服务器处理请求并返回一个HTTP响应。请求由方法(如GET、POST)、URL、...

    cookie接口 实现本地或客户端的cookie的创建和读取

    在IT行业中,Cookie是Web应用程序中广泛使用的机制,用于存储客户端状态信息。它们是由服务器发送到用户...确保在实际应用中遵循HTTP协议和相关的安全最佳实践,以保护用户数据并防止跨站脚本攻击(XSS)等安全问题。

    java访问.net webservice获取与设置cookie

    Web服务是一种通过HTTP协议提供功能的方法,使得不同系统间的应用可以相互通信。.NET Web服务通常基于SOAP(Simple Object Access Protocol)协议,而Java可以通过使用JAX-WS(Java API for XML Web Services)来...

    post提交工具/cookie提交工具(php版,同时支持POST与cookie)

    POST方法是HTTP协议中用于传输大量数据的一种方式,而cookie则是用来存储用户会话信息的小型文本文件。 在【描述】中提到,用户对现有的POST工具感到不满,因此自行开发了这个PHP版本的工具。这个工具设计用于PHP...

    Cookie简介及JSP处理Cookie的方法.doc

    Cookie是Web开发中的一种技术,用于在客户端存储和管理数据,解决了HTTP协议无状态的问题。它们是由服务器端生成,发送到客户端(浏览器),并由浏览器保存。当用户再次访问同一网站时,浏览器会将Cookie回传给...

    易语言HTTP访问(带Cookie)模块源码

    在HTTP协议中,Cookie是一种用于维护客户端和服务器之间状态的小型文本文件。当用户访问一个网站时,服务器可能会发送一个Cookie到用户的浏览器,浏览器会将Cookie保存起来,当用户再次访问该网站时,浏览器会将之前...

    有关网站cookie的用法

    添加Cookie通常通过HTTP响应头完成。在服务器端,开发者可以使用特定的编程语言(如JavaScript、PHP或ASP.NET)来设置Cookie。例如,在JavaScript中,我们可以使用`document.cookie`属性来设置Cookie: ```...

Global site tag (gtag.js) - Google Analytics