COOKIE
COOKIE是大家都非常熟悉的了,通过它可以在客户端保存用户状态,即使用户关闭浏览器也能继续保存。那么客户端与服务器端是如何交换COOKIE信息的呢?没错,也是通过HTTP消息头。
首先写一个简单的ASP网页:
<%
Dim i
i = Request.Cookies("key")
Response.Write i
Response.Cookies("key") = "haha"
Response.Cookies("key").Expires = #2007-1-1#
%>
第 一次访问此网页时,屏幕上一片白,第二次访问时,则会显示出“haha”。通过阅读程序不难发现,屏幕上显示的内容实际上是COOKIE的内容,而第一次 访问时还没有设置COOKIE的值,所以不会有显示,第二次显示的是第一次设置的值。那么对应的HTTP消息头应该是什么样的呢?
第一次请求时没什么不同,略过
第一次返回时消息内容多了下面这一行:
Set-Cookie: key=haha; expires=Sun, 31-Dec-2006 16:00:00 GMT; path=/
很明显,key=haha表示键名为“key”的COOKIE的值为“haha”,后面是这则COOKIE的过期时间,因为我用的中文操作系统的时区是东八区,2007年1月1日0点对应的GMT时间就是2006年12月31日16点。
第二次再访问此网页时,发送的内容多了如下一行:
Cookie: key=haha
它的内容就是刚才设的COOKIE的内容。可见,客户端在从服务器端得到COOKIE值以后就保存在硬盘上,再次访问时就会把它发送到服务器。发送时并没有发送过期时间,因为服务器对过期时间并不关心,当COOKIE过期后浏览器就不会再发送它了。
如 果使用IE6.0浏览器并且禁用COOKIE功能,可以发现服务器端的set-cookie还是有的,但客户端并不会接受它,也不会发送它。有些网站,特 别是在线投票网站通过记录COOKIE防止用户重复投票,破解很简单,只要用IE6浏览器并禁用COOKIE就可以了。也有的网站通过COOKIE值为某 值来判断用户是否合法,这种判断也非常容易通过手工构造HTTP消息头来欺骗,当然用HOSTS的方式也是可以欺骗的。
Session
HTTP协议本身是无状态的,服务器和客户端都不保证用户访问期间连接会一直保 持,事实上保持连接是HTTP1.1才有的新内容,当客户端发送的消息头中有“Connection: Keep-Alive”时表示客户端浏览器支持保持连接的工作方式,但这个连接也会在一段时间没有请求后自动断开,以节省服务器资源。为了在服务器端维持 用户状态,SESSION就被发明出来了,现在各主流的动态网页制做工具都支持SESSION,但支持的方式不完全相同,以下皆以ASP为例。
当用户请求一个ASP网页时,在返回的HTTP消息头中会有一行:
Set-Cookie: ASPSESSIONIDCSQCRTBS=KOIPGIMBCOCBFMOBENDCAKDP; path=/
服 务器通过COOKIE的方式告诉客户端你的SESSIONID是多少,在这里是“KOIPGIMBCOCBFMOBENDCAKDP”,并且服务器上保留 了和此SESSIONID相关的数据,当同一用户再次发送请求时,还会把这个COOKIE再发送回去,服务器端根据此ID找到此用户的数据,也就实现了服 务器端用户状态的保存。所以我们用ASP编程时可以使用“session("name")=user”这样的方式保存用户信息。注意此COOKIE内容里 并没有过期时间,这表示这是一个当关闭浏览器时立即过期的COOKIE,它不会被保存到硬盘上。这种工作方式比单纯用COOKIE的方式要安全很多,因为 在客户端并没有什么能让我们修改和欺骗的值,唯一的信息就是SESSIONID,而这个ID在浏览器关闭时会立即失效,除非别人能在你浏览网站期间或关闭 浏览器后很短时间内知道此ID的值,才能做一些欺骗活动。因为服务器端判断SESSION过期的方式并不是断开连接或关闭浏览器,而是通过用户手工结束 SESSION或等待超时,当用户关闭浏览器后的一段时间里SESSION还没有超时,所以这时如果知道了刚才的SESSIONID,还是可以欺骗的。因 此最安全的办法还是在离开网站之前手工结束SESSION,很多网站都提供“Logout”功能,它会通过设置SESSION中的值为已退出状态或让 SESSION立即过期从而起到安全的目的。
SESSION和COOKIE的方式各有优缺点。SESSION的优点是比较安全,不容易被欺骗,缺 点是过期时间短,如果用过在超过过期时间里没有向服务器发送任何信息,就会被认为超过过期了;COOKIE则相反,根据服务器端设置的超时时间,可以长时 间保留信息,即使关机再开机也可能保留状态,而安全性自然大打折扣。很多网站都提供两种验证方式相结合,如果用户临时用这台电脑访问此访问则需要输入用户 名和密码,不保存COOKIE;如果用户使用的是自己的个人电脑,则可以让网站在自己硬盘上保留COOKIE,以后访问时就不需要重新输入用户名和密码 了。
分享到:
相关推荐
在IT行业中,尤其是在Web开发领域,Cookie和Session是两种非常重要的技术,用于管理用户状态和保持会话。这里我们深入探讨这两个概念以及它们在Java Web中的应用。 首先,Cookie是客户端存储的小型文本文件,由...
Cookie&Session笔记.md
在"Cookie&Session&Cache"这个压缩包中,可能包含了针对这三种技术的封装库,提供了方便的API来简化开发中的操作,如创建、读取、更新和删除Cookie、Session和Cache的功能。这些库通常会提供错误处理机制,确保数据...
### Day09_cookie & Session:详解Cookie与Session的用法及生命周期 在现代Web开发中,维护用户状态是一项至关重要的任务。Cookie与Session是实现这一目标的两种主要机制。本文将深入探讨这两种技术的工作原理、...
在Web开发中,Cookie和Session是两种非常重要的技术,用于管理用户会话状态。它们都是用来跟踪用户身份和保持用户信息的方式,但有着不同的工作原理和应用场景。在本教程“day16_cookie&session”中,我们将深入探讨...
新手实用,内容详细,内含cookie以及session的定义,价值,使用的方法...
5. **网络传输**:每次HTTP请求,浏览器都会将Cookie发送到服务器,而Session只有在首次登录或Session ID改变时才发送。 在实际应用中,选择Cookie还是Session取决于需求和场景。例如,对于不敏感的用户设置,可以...
知识点一:会话的基本概念 会话是指在Web应用中,一个客户端(通常为浏览器)与Web服务器之间连续发生的一系列请求和响应的过程。例如,用户在一个网站上...以上就是对“cookie&session.pdf”文件中知识点的详细解析。
cookie和session缓存技术的思维导图,结构清晰,便于初学者阅读
在Web开发中,Cookie和Session是两种非常重要的用户会话管理技术。它们主要用来跟踪用户的状态,以便在多个页面间保持用户的登录信息或其他个性化设置。本文将深入探讨这两种技术及其在JavaEE企业全栈开发中的应用。...
在IT行业中,尤其是在Web开发领域,Cookie、Session和Cache是三种非常重要的概念,它们用于管理用户状态、提高网站性能和优化用户体验。以下是对这些概念的详细解释,以及如何在C#中进行操作。 1. **Cookie**: ...
Cookie 和 Session 在 JSP 中的应用 在 Web 开发中,会话技术是非常重要的一部分。它可以使得不同的请求之间实现数据共享,从而提高用户体验和开发效率。本文将详细介绍 Cookie 和 Session 在 JSP 中的应用,包括...
此资源是我的博客11_JavaWeb——Cookie&Session中的案例资源,关于比较难以编写的工具类我已在博客中给出,下载此资源后可直接运行,实现登录注册功能。其中登录功能能够记住用户使得下次登录不需要重复输入用户名和...
- 客户端一旦收到Cookie,会在后续对同一服务器的HTTP请求中自动附带这个Cookie。这意味着服务器可以借助Cookie来跟踪用户的状态。 - 每个Cookie的大小限制通常为4KB,所以不适合存储大量的数据。 4. **获取...
在Web开发中,Cookie和Session是两种常见的用户身份验证机制,尤其在C#编程语言中,它们被广泛用于实现登录功能。本实例将探讨如何在C#环境下利用Cookie和Session来处理用户登录状态。 首先,我们要理解Cookie和...
在Web开发中,Cookie和Session是两种非常重要的用户身份验证和会话管理机制。它们用于在客户端(浏览器)和服务器之间存储和交换信息,确保用户在浏览网站时能够保持登录状态,实现个性化设置等。 首先,让我们详细...
### Cookie、Session与Token的区别及使用详解 #### 一、Cookie **定义**: Cookie是一种用于在客户端保持状态的方案。简单来说,当你访问一个网站时,该网站可能会在你的计算机上留下一些信息(如用户名、密码等),...
3. **如何发送和接收 Cookie**:每当客户端向服务器发起 HTTP 请求时,如果存在相关的 Cookie,这些 Cookie 将被包含在 HTTP 请求头中的 `Cookie` 字段里。服务器可以通过响应头中的 `Set-Cookie` 字段设置新的 ...