cookie机制

  1. 1. Cookie 饼干
    1. 1.1. Cookie 饼干
    2. 1.2. 如何创建 Cookie
    3. 1.3. 服务器如何获取 Cookie
    4. 1.4. 服务器如何修改 Cookie
    5. 1.5. cookie的生命方法
    6. 1.6. cookie的path
  2. 2. cookie免用户名登录

Cookie 饼干

1、Cookie 翻译过来是饼干的意思。
2、Cookie 是服务器通知客户端保存键值对的一种技术。
3、客户端有了 Cookie 后,每次请求都发送给服务器。
4、每个 Cookie 的大小不能超过 4kb

1
2
3
4
5
6
7
8
9
 Servlet 程序中的代码:
protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
//1 创建 Cookie 对象
Cookie cookie = new Cookie("key4", "value4");
//2 通知客户端保存 Cookie resp.addCookie(cookie);
//1 创建 Cookie 对象 Cookie cookie1 = new Cookie("key5", "value5");
//2 通知客户端保存 Cookie resp.addCookie(cookie1); resp.getWriter().write("Cookie 创建成功");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取cookie值
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
// getName方法返回Cookie的key(名)
// getValue方法返回Cookie的value值
resp.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "] <br/>");
}
Cookie iWantCookie = CookieUtils.findCookie("key1", cookies);
for (Cookie cookie : cookies) {
if ("key2".equals(cookie.getName())) {
iWantCookie = cookie;
break;
} }
// 如果不等于null,说明赋过值,也就是找到了需要的Cookie
if (iWantCookie != null) {
resp.getWriter().write("找到了需要的Cookie"+iWantCookie.getName() + iWantCookie.getValue());
}
}

一般不支持空格等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected void updataCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取cookie值

resp.getWriter().write("第一种方案:");
Cookie cookie = new Cookie("key1","newvalue1");
resp.addCookie(cookie);
resp.getWriter().write("key1的cookie值已经被修改好"+"<br/>");
resp.getWriter().write("第二种方案:");
Cookie cookie2 = CookieUtils.findCookie("key2", req.getCookies());
if (cookie2 != null) {
2、调用setValue()方法赋于新的Cookie值。
cookie2.setValue("newValue2");
resp.addCookie(cookie2);//不要忘了保存操作
3、调用response.addCookie()通知客户端保存修改
resp.getWriter().write("key2的cookie值已经被修改好");
}

}

cookie的生命方法

Cookie 的生命控制指的是如何管理
Cookie 什么时候被销毁(删除)
setMaxAge()
正数,表示在指定的秒数后过期 负数,表示浏览器一关,
Cookie 就会被删除(默认值是-1) 零,表示马上删除 Cookie

cookie的path

path属性是根据请求的地址进行过滤
Cookie 的 path 属性可以有效的过滤哪些
Cookie 可以发送给服务器。哪些不发。
path 属性是通过请求的地址来进行有效的过滤。
CookieA path=/工程路径
CookieB path=/工程路径/abc 请求地址如下:
http://ip:port/工程路径/a.html
CookieA 发送 CookieB 不发送
http://ip:port/工程路径/abc/a.html
CookieA 发送 CookieB 发送

cookie免用户名登录

##测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
protected void login(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
// 1.获取请求
// 2.调用service.xxx处理业务
// 3.login()方法返回处理结果判断是否成功
//成功条到成功页面
// 失败返回登录界面
String username = req.getParameter("username");
String password = req.getParameter("password");
User loginUser = userService.login(new User(null,username,password,null));
//如果等于null,说明登录失败
if (loginUser == null){
//调回登录界面
System.out.println("登录失败");
req.setAttribute("msg","用户名或密码错误");
req.setAttribute("username",username);
req.getRequestDispatcher("/index.jsp").forward(req,resp);
}
else
{
//登录成功
System.out.println("用户名为["+username+"]欢迎");
System.out.println("登录成功");
Cookie cookie = new Cookie("username",username);
Cookie cookie1 = new Cookie("password",password);
cookie.setMaxAge(60*60*12*7);//当前cookie一周内有效
cookie1.setMaxAge(10);//密码的cookie
resp.addCookie(cookie);
resp.addCookie(cookie1);
int pageNo = WebUtils.parseInt(req.getParameter("pageNo"),1);
int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);
//2.调用BuyeService.page(pageNo,pageSize);page对象
Page<Byue> page = byueService.page(pageNo,pageSize);
page.setUrl("clientByueServlet?action=page");
//3.保存到request域中
req.setAttribute("page",page);
req.getRequestDispatcher("/pages/home.jsp").forward(req,resp);

}