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

4星 · 超过85%的资源 需积分: 12 1 下载量 73 浏览量 更新于2024-08-11 1 收藏 11KB MD 举报
"Cookie和Session是Web开发中用于管理用户会话的关键技术,它们允许在多次HTTP请求和响应之间保持数据。本笔记主要介绍了这两种技术的基本概念、使用方法以及一些细节问题。\n\n## Cookie\nCookie是客户端会话技术,它将数据存储在用户的浏览器上。以下是对Cookie的详细说明:\n\n1. **创建和发送Cookie**:创建一个Cookie对象,通常通过`new Cookie(String name, String value)`构造,然后使用`response.addCookie(Cookie cookie)`将其添加到响应中,以便发送到客户端。\n\n2. **工作原理**:Cookie基于HTTP协议的响应头`Set-Cookie`和请求头`Cookie`进行通信。服务器通过`Set-Cookie`将Cookie发送给浏览器,浏览器在后续请求中通过`Cookie`头将Cookie回传给服务器。\n\n3. **Cookie的特性**:\n - **数量**:一次请求可以发送多个Cookie,只需创建多个Cookie对象并多次调用`response.addCookie()`。\n - **生命周期**:默认情况下,Cookie在浏览器关闭时删除。若要持久存储,可通过`setMaxAge(int seconds)`设置存活时间,正值表示写入硬盘并设定生存秒数,负值表示使用默认值,零表示立即删除。\n - **字符编码**:早期版本的Tomcat不支持直接存储中文数据,需使用URL编码。Tomcat 8及以后版本已支持中文,但特殊字符仍推荐编码存储。\n - **域与路径**:Cookie的可见范围由`setDomain()`和`setPath()`控制。默认情况下,Cookie仅限于创建它的虚拟目录,设置路径为更通用的路径(如"/")可实现多个Web项目的共享。\n\n## Session\nSession是服务器端会话技术,它在服务器上存储用户会话数据。\n\n1. **创建与使用Session**:在JSP中,可以通过`session.getAttribute(String name)`来设置或获取Session中的数据,`session.invalidate()`则可以结束一个Session。\n\n2. **生命周期**:Session的默认超时时间通常是30分钟,服务器可以根据需求通过`setMaxInactiveInterval(int interval)`设置其存活时间。\n\n3. **内存消耗**:Session数据存储在服务器内存中,因此大量用户并发可能导致服务器内存压力增大。需要注意管理和优化Session的使用,以防止内存泄漏。\n\n4. **跨域共享**:Session本身不支持跨域共享。若需要在不同域名下共享数据,可以考虑使用Cookie(通过设置合适的域和路径)或采用其他机制如JWT(JSON Web Tokens)。\n\n在实际开发中,Cookie和Session经常结合使用,Cookie用于存储少量、不太敏感的信息(如用户ID),而Session则用于存储更重要的用户会话状态。理解并合理运用这两种技术对于构建健壮的Web应用至关重要。"