Cookie与Session详解:客户端与服务器端会话技术

需积分: 9 0 下载量 140 浏览量 更新于2024-08-05 收藏 11KB MD 举报
"Cookie&Session笔记.md" 在Web开发中,会话管理是至关重要的,它允许用户在多次请求之间保持状态。本笔记主要探讨两种常见的会话技术:Cookie和Session,以及它们在JSP中的应用。 ### 会话技术 会话是指用户打开浏览器与服务器进行一系列交互的过程。在一次会话期间,可能会有多个HTTP请求和响应。会话的主要目的是在这些请求之间共享数据,以保持用户的上下文信息。会话技术分为客户端会话技术和服务器端会话技术。 #### Cookie **Cookie** 是客户端会话技术,它将数据存储在用户的浏览器上。通过以下步骤,我们可以创建和使用Cookie: 1. **创建Cookie对象**:使用`new Cookie(String name, String value)`创建一个Cookie,其中`name`是键,`value`是值。 2. **发送Cookie**:通过`response.addCookie(Cookie cookie)`将Cookie添加到响应头中,发送给客户端。 3. **获取Cookie**:在后续的请求中,服务器可以通过`Cookie[] request.getCookies()`获取客户端发送的所有Cookie。 Cookie的实现基于HTTP协议的响应头`Set-Cookie`和请求头`Cookie`。每次浏览器收到`Set-Cookie`,它会将Cookie保存,并在后续请求中自动将Cookie信息放入`Cookie`头。 **Cookie的特性**: - **数量限制**:浏览器通常允许每个域最多存储20个Cookie,且总大小不超过4KB。 - **生命周期**:默认情况下,Cookie在浏览器关闭时被删除。若要持久化存储,需使用`setMaxAge(int seconds)`方法,设置非负值表示存活时间,零或负值表示立即或不再保留。 - **字符编码**:早期版本的Tomcat不支持直接存储中文数据,需要URL编码。但从Tomcat 8开始,Cookie可以直接处理中文,但仍然推荐使用编码以兼容特殊字符。 - **共享问题**:默认情况下,Cookie只在设置的路径内有效,不同web项目间无法共享。通过`setPath(String path)`可以扩大Cookie的作用域,实现共享。 #### Session **Session** 是服务器端会话技术,它在服务器上为每个用户分配一个唯一的会话ID,并通过Cookie(默认)或URL重写等方式将该ID返回给客户端。在后续请求中,客户端携带会话ID,服务器根据ID找到对应会话中的数据。 **Session的使用**: 1. **创建Session**:`HttpSession session = request.getSession();` 2. **存储数据**:`session.setAttribute(String name, Object value);` 3. **获取数据**:`Object value = session.getAttribute(String name);` 4. **销毁Session**:`session.invalidate();` **Session的特点**: - **存储容量**:相比于Cookie,Session能存储更多数据,不受大小限制。 - **生命周期**:默认情况下,Session在一段时间无活动后自动失效,时间间隔可在服务器配置。 - **安全性**:Session数据存储在服务器,相对更安全,但服务器内存消耗大。 - **共享问题**:在同一个应用下,Session默认是共享的,无需额外设置。 在JSP中,我们可以使用内置的`session`对象直接操作Session,简化开发流程。 总结来说,Cookie适合存储较小量、不需要长期保存的数据,而Session适用于存储大量或敏感的数据,两者结合使用可以提供灵活的会话管理策略。了解和掌握这两种技术对于Web开发者来说至关重要,因为它们是构建动态、交互性强的Web应用的基础。