Java操作Session与Cookie
1,Java操作Session
Java操作Session非常简单,步骤如下
1.1,在servlet中通过request获取session
HttpSession session = request.getSession(true);
true代表当前没有建立session则创建一个session,并返回这个session
false代表当前没有session,不做操作,返回null
默认为true
1.2,利用session对象设置属性或删除属性
添加
session.setAttribute("username", username);
session.setMaxInactiveInterval(60 * 30); //默认为秒
删除
session.removeAttribute("username")
2,Java操作Cookie
Java操作Cookie就有些需要注意的地方了
为此,建立一个操作cookie的工具类
CookieUtil.java
1 package org.guangsoft.util;
2
3 import javax.servlet.http.Cookie;
4 import javax.servlet.http.HttpServletRequest;
5 import javax.servlet.http.HttpServletResponse;
6
7 /**
8 *
9 * @author guanghe
10 */
11 public class CookieUtil
12 {
13 /**
14 * 设置cookie
15 *
16 * @param response
17 * @param key cookie名字
18 * @param value cookie值
19 * @param maxAge cookie生命周期 以秒为单位
20 * @param path cookie传递路径
21 * @param domain cookie域
22 */
23 public static void addCookie(HttpServletResponse response,
24 String key, String value, int maxAge, String path, String domain)
25 {
26 Cookie cookie = new Cookie(key, value);
27 cookie.setPath(path);
28 cookie.setDomain(domain);
29 if (maxAge > 0)
30 {
31 cookie.setMaxAge(maxAge);
32 }
33 response.addCookie(cookie);
34 }
35
36 /**
37 * 根据名字获取cookie
38 *
39 * @param request
40 * @param name cookie名字
41 * @return
42 */
43 public static Cookie getCookieByName(HttpServletRequest request, String name)
44 {
45 Cookie cookies[] = request.getCookies();
46 if (cookies != null)
47 {
48 for (int i = 0; i < cookies.length; i++)
49 {
50 Cookie cookie = cookies[i];
51 if (name.equals(cookie.getName()))
52 {
53 return cookie;
54 }
55 }
56 }
57 return null;
58 }
59 }
调用代码:
UserService.java
1 public boolean setAutoLog(HttpServletRequest request,HttpServletResponse response, String username)
2 {
3 CookieUtil.addCookie(response, "username", username, 3600 * 24 * 3, "/manage/userServlet.action", "localhost");
4 return true;
5 }
6
7 public boolean logout(HttpServletRequest request,HttpServletResponse response, String username)
8 {
9 CookieUtil.addCookie(response,"username","",0, "/manage/userServlet.action", "localhost");
10 return true;
11 }
严重提醒:删除Cookie时,只设置maxAge=0将不能够从浏览器中删除cookie,
* 因为一个Cookie应当属于一个path与domain,所以删除时,Cookie的这两个属性也必须设置。
* 误区:没有重视客户端发送到服务器端的cookie的path与domain值为空这个问题。
* 因为在登陆系统时,设置了Cookie的path与domain属性的值,就误认为每次客户端请求时,都会把Cookie的
* 这两个属性也提交到服务器端,但系统并没有把path与domain提交到服务器端(提交过来的只有Cookie的key,value值)。