Cookie&Session&中文英文二进制数据编码(Unicode,ASCII,BASE64)&HTTP

本文详细介绍了Cookie和Session两种常见的会话跟踪技术在Web程序中的应用,以及Unicode、ASCII和BASE64编码在处理中文和二进制数据中的作用。通过分析Cookie的工作原理、生命周期、设置和安全特性,以及Session的创建、生命周期、有效期和常用方法,阐述了它们在保持用户状态方面的区别。此外,还探讨了Cookie和Session在实际应用中的安全性和选择考虑因素。
摘要由CSDN通过智能技术生成

Cookie&Session

在Web程序中,会话跟踪用来跟踪用户的整个会话,是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。

而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。

常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

当前对会话的理解:从在浏览器中打开一个网站,到关闭浏览器的过程,是一次会话(就像进入一家超市并开始购物,连同中间非购物的闲逛时间,直到最终离开这家超市)。

Cookie

Cookie机制

Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。

让我们说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置(不同的浏览器对应不同的位置);自此,客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在HTTP请求头(Request Header)了。有了Cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息(这些信息直接由客户端发过来,不需要存储到服务器端),从而动态生成与该客户端相对应的内容。通常,我们可以从很多网站的登录界面中看到“请记住我”这样的选项,如果你勾选了它之后再登录,那么在下一次访问该网站的时候就不需要进行重复而繁琐的登录动作了,而这个功能就是通过Cookie实现的。

如果你把Cookies看成为HTTP协议的一个扩展的话,理解起来就容易的多了,其实本质上Cookies就是HTTP的一个扩展。有两个HTTP头部是专门负责设置以及发送Cookie的,它们分别是Set-Cookie以及Cookie。

当服务器返回给客户端一个HTTP响应信息时,其中如果包含Set-Cookie这个头部时,意思就是指示客户端建立一个Cookie,并且在后续的HTTP请求中自动发送这个Cookie到服务器端,直到这个Cookie过期。如果Cookie的生存时间是整个会话期间,那么浏览器会将Cookie保存在内存中,浏览器关闭时就会自动清除这个Cookie。另外一种情况是保存在客户端的硬盘中,浏览器关闭的话,该Cookie也不会被清除,下次打开浏览器访问对应网站时,这个Cookie就会自动再次发送到服务器端。

一个Cookie的设置以及发送过程分为以下四步:

  1. 客户端发送一个HTTP请求到服务器端;
  2. 服务器端发送一个HTTP响应到客户端,其中包含Set-Cookie头部
  3. 客户端发送一个HTTP请求到服务器端,其中包含Cookie头部
  4. 服务器端发送一个HTTP响应到客户端
    这个过程用图例表示会更加清晰:
    在这里插入图片描述更通俗地讲,Cookie就是服务器端颁发给每个客户端的一个通行证,上面标注着每个用户的状态,服务器端还可以根据需求修改这些状态。

Java对Cookie的封装

Java中把Cookie封装成了javax.servlet.http.Cookie类。每个Cookie都是该Cookie类的对象。服务器通过操作Cookie对象对客户端Cookie进行操作。通过request.getCookies()获取客户端提交的所有Cookie(以Cookie[]数组形式返回),通过response.addCookie(Cookie cookie)向客户端设置Cookie。

Cookie对象使用key-value的形式保存用户状态,一个Cookie对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值