您可以阅读描述cookies和相关标头
Set-cookie``cookie的RFC,并了解它们是什么。
你可以通过在第7章
Servlet规格,如果你想详细了解如何cookie和session有关系。
您首先需要了解HTTP是无状态协议。这意味着客户端发出的每个请求都与任何先前或将来的请求无关。但是,作为用户,我们非常希望在与Web应用程序交互时具有某种状态。例如,银行应用程序只希望您能够查看和管理交易。音乐流媒体网站可能希望根据您已经听到的内容推荐一些好的节奏。
为此,引入
cookie和
Session概念。cookies是键值对,但具有特定格式(请参阅链接)。会话是服务器端实体,用于存储跨越服务器和客户端之间的多个请求/响应的信息(在内存中或持久存储)。
该
ServletHTTP会话使用与名字的cookie
JSESSIONID和值标识会话。
该
Servlet容器保持的地图(YMMV)
HttpSession对象和这些标识符。当客户端第一次发出请求时,服务器会创建一个
HttpSession具有唯一标识符的对象,并将其存储在其映射中。然后
Set-cookie在响应中添加标题。它将cookie的名称设置为,
JSESSIONID并将其值设置为刚创建的标识符。
这是服务器使用的最基本的cookie。您可以根据需要设置任意数量的信息。该
ServletAPI使用该
HttpServletResponse#addcookie(cookie)方法为您简化了操作,但是您可以使用该
HttpServletResponse#addHeader(String,String)方法自己完成操作。
客户端接收这些cookie,并将其存储在某个地方,通常存储在文本文件中。向服务器发送新请求时,它可以使用请求
cookie标头中的cookie
来通知服务器它可能已经完成了上一个请求。
当
Servlet容器收到请求时,它将提取
cookie标头值,并尝试
HttpSession使用
JSESSIONIDcookie中的键从其映射中检索对象。这
HttpSession则物体被连接到
HttpServletRequest该对象
Servlet容器创建并传递给你的
Servlet。您可以使用
setAttribute(String,Object)和
getAttribute(String)方法来管理状态。



