设置Session和Cookie

本文介绍了在Spring MVC框架下如何操作Session和Cookie。通过Servlet原生API,可以方便地实现Session的设置与获取,例如保存用户数据。同时,文章展示了设置Cookie的简单方法,并提供了测试案例。

设置Session和Cookie

使用Spring MVC时,如果需要使用Session和Cookie,可以通过Servlet原生api设置Session和Cookie

设置Session

当我们需要保存Session时,如保存用户数据,只需要在请求处理方法的参数列表中添加一个HttpSession对象,然后调用对象的setAttribute方法和getAttribute方法,就可以轻松地设置和获取session

@RestController
public class MyController {
   
   

    @RequestMapping("/saveSession")
    public String test(HttpSession session
### 设置 Cookie 在 Web 开发中,Cookie 是一种客户端存储机制,允许服务器将数据存储在用户的浏览器中,以便在后续请求中进行识别或跟踪用户状态。在 Java Web 开发中,可以通过 `HttpServletResponse` 对象添加 Cookie。例如: ```java import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CookieExample extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) { // 创建一个 Cookie 对象,设置名称Cookie cookie = new Cookie("user", "JohnDoe"); // 设置 Cookie 的最大存活时间(单位:秒) cookie.setMaxAge(60 * 60 * 24); // 24 小时 // 设置 Cookie 的路径,确保在整个应用中可用 cookie.setPath("/"); // 将 Cookie 添加到响应中 response.addCookie(cookie); } } ``` Cookie 的生命周期由 `setMaxAge()` 方法控制,若未设置,则 Cookie 会在浏览器关闭时被删除。Cookie 可用于记录用户偏好、跟踪会话等场景,但需要注意浏览器对 Cookie 的大小数量限制。 ### 使用 Session 管理用户会话 Session 是一种服务器端的会话管理机制,用于在多个请求之间存储用户的状态信息。Session 通常依赖于 Cookie 来保存会话标识(如 `jsessionid`),但也可以通过 URL 重写来实现无 Cookie 的会话跟踪。 在 Java Web 开发中,可以通过 `HttpSession` 对象来创建管理 Session。例如: ```java import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class SessionExample extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) { // 获取或创建 Session 对象 HttpSession session = request.getSession(); // 设置 Session 属性 session.setAttribute("user", "JohnDoe"); // 获取 Session ID String sessionId = session.getId(); } } ``` Session 的生命周期由服务器控制,默认情况下,Session 会在 30 分钟内未被使用后失效。可以通过以下方式修改 Session 的超时时间: - 在 `web.xml` 中配置 Session 超时时间(单位:分钟): ```xml <session-config> <session-timeout>15</session-timeout> </session-config> ``` - 在代码中通过 `setMaxInactiveInterval()` 方法设置超时时间(单位:秒): ```java session.setMaxInactiveInterval(60 * 15); // 15 分钟 ``` Session 可以通过 `invalidate()` 方法手动销毁,或者在服务器关闭时自动销毁。 ### 禁用 Cookie 并使用 URL 重写 在某些场景下,如 WAP 浏览器不支持 Cookie,可以通过 URL 重写的方式来传递 Session ID。Java Web 规范支持通过配置禁用 Cookie,并在 URL 中附加 `jsessionid` 来维持会话状态。例如: ```java String urlWithSession = response.encodeURL("http://example.com/hello"); ``` 该方法会自动检测客户端是否支持 Cookie,若不支持,则在 URL 后附加 `jsessionid` 参数。这种方式适用于需要兼容无 Cookie 环境的 Web 应用。 ### Session 的创建与销毁机制 Session 的创建取决于请求中是否包含有效的 `jsessionid`。如果请求中没有 `jsessionid`,服务器将创建一个新的 Session 对象。如果请求头中包含 `jsessionid`,服务器会查找是否存在对应的 Session: - 如果存在匹配的 Session ID,则复用该 Session。 - 如果不存在,则创建一个新的 SessionSession 的销毁可以通过以下方式实现: - 默认超时(30 分钟无活动) - 调用 `setMaxInactiveInterval()` 设置超时时间 - 手动调用 `invalidate()` 方法销毁 Session - 关闭服务器 - 在 `web.xml` 中配置 Session 超时时间[^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值