栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Cookie and Session

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Cookie and Session

cookie and Session
  • 前言
  • 一、cookie
    • 1、什么是cookie
    • 2、创建并添加cookie对象
      • A.Step
      • B.XML configuration
      • C.通过反射分流
      • D.Code
      • E.Result
    • 3、如何获取cookie对象
      • A.Step
      • B.Code
      • C.Result
      • D.cookieUtil之寻找cookie对象
    • 4、如何修改cookie对象值
      • A.方案
      • B.Result
    • 5、查看浏览器的cookie
    • 6、cookie的生命控制
      • A.默认-1
      • B.立即删除
      • C.存活1小时
      • Result
    • 7、cookie的有效路径Path
    • 8、免用户名登录
      • A.Step
      • B.Code
  • 二、Session
    • 1、什么是Session
    • 2、创建和获取Session对象
    • 3、存储、获取信息
    • 4、可控Session对象的生命周期
  • 三、为什么能通过请求获取session
  • 总结
  • 参考文献
  • 附录
    • 1、cookie.html
    • 2、session.html

前言

了解cookie和Session技术。

一、cookie 1、什么是cookie

cookie主要用于存储键值对。cookie技术是服务器通知客户端保存键值对(cookie对象)的一种技术。保存好键值对后,每次发送请求附带cookie对象发送给服务器,每个cookie对象的大小不能超过4kb。

public cookie(String name, String value) {
        validation.validate(name);
        this.name = name;
        this.value = value;
    }
2、创建并添加cookie对象 A.Step

B.XML configuration


    
        cookieServlet
        com.xhu.servlet.cookieServlet
    
    
        cookieServlet
        /cookieServlet
    

C.通过反射分流
package com.xhu.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;


public abstract class baseServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String action = req.getParameter("action");
        try {
            Method declaredMethod = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
            declaredMethod.setAccessible(true);
            declaredMethod.invoke(this, req, resp);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

D.Code
package com.xhu.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class cookieServlet extends baseServlet {
    
    protected void createcookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.创建cookie对象
        cookie c1 = new cookie("username", "root");
        cookie c2 = new cookie("password", "root");
        //2.设置response编码以及浏览器的解码格式
        resp.setContentType("text/html;charset=utf-8");
        //3.通知浏览器本地存cookie
        resp.addcookie(c1);
        resp.addcookie(c2);
        //4.创建成功
        resp.getWriter().print("cookie对象创建成功");

    }
}

E.Result

3、如何获取cookie对象 A.Step

B.Code
protected void getcookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取所有cookie对象
        cookie[] cookies = req.getcookies();
        //2.打印cookie对象
        PrintWriter writer = resp.getWriter();
        for (int i = 0; i < cookies.length; i++) {
            writer.print(cookies[i].getName() + ":" + cookies[i].getValue());
            writer.println();
        }
    }
C.Result

D.cookieUtil之寻找cookie对象
package com.xhu.utils;

import javax.servlet.http.cookie;

public class cookieUtil {
    public static cookie findcookie(String name, cookie[] cookies) {
        if (name == null || cookies == null || cookies.length == 0)
            return null;
        for (cookie cookie : cookies) {
            if (name.equals(cookie.getName()))
                return cookie;
        }
        return null;
    }
}

4、如何修改cookie对象值 A.方案

1)方案一
服务端生成新的同名不同值cookie对象,然后把其添加在响应头中,浏览器会自动根据响应头的set-cookie来更新。

protected void updatecookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.生成同名不同值cookie对象。
        cookie cookie = new cookie("password", "lls");
        //2.将cookie对象添加到响应头。
        resp.setContentType("text/html;charset=utf-8");
        resp.addcookie(cookie);
        //3.回传消息添加成功给浏览器
        resp.getWriter().println("password成功修改为lls");
    }

2)方案2
寻找指定cookie对象,然后setValue,最后通知客户端。

protected void updatecookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       
        //1.寻找指定cookie对象
        cookie cookie = cookieUtil.findcookie("password", req.getcookies());
        //2.修改cookie对象值
        cookie.setValue("root");
        //3.通知客户端
        resp.setContentType("text/html;charset=utf-8");
        resp.addcookie(cookie);
        //4.回传消息修改成功给浏览器
        resp.getWriter().println("password成功修改为root");
    }
B.Result


5、查看浏览器的cookie

6、cookie的生命控制

对cookie对象的生命控制,指设置它的存活时间。通过setMaxAge()来设置

A.默认-1

默认-1表示session级别,当浏览器关闭时则将cookie对象删除。private int maxAge = -1;

protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.生成cookie对象
        cookie cookie = new cookie("defaultLife","defaultLife");
        //2.将默认生命周期的cookie对象回传浏览器
        resp.setContentType("text/html;charset=utf-8");
        resp.addcookie(cookie);
        //3.通知消息
        resp.getWriter().println("默认生命周期的cookie对象创建成功");
    }
B.立即删除
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.生成cookie对象
        cookie cookie = new cookie("deleteNow","deleteNow");
        //2。设置其生命周期为立马删除
        cookie.setMaxAge(0);
        //3.通知客户端
        resp.setContentType("text/html;charset=utf-8");
        resp.addcookie(cookie);
        //3.回传消息
        resp.getWriter().println("设置立马删除的cookie对象成功");
    }
C.存活1小时
protected void life3600(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.生成cookie对象
        cookie cookie = new cookie("life3600","life3600");
        //2。设置其生命周期为一个小时后删除
        cookie.setMaxAge(60 * 60);
        //3.通知客户端
        resp.setContentType("text/html;charset=utf-8");
        resp.addcookie(cookie);
        //4.回传消息
        resp.getWriter().println("设置存活一小时的cookie对象成功");
    }
Result

7、cookie的有效路径Path

当请求发起时,浏览器会把cookie对象附带在请求头里发送给服务器,而只有请求路径能跟cookie对象的Path匹配时才能将该cookie对象发送给服务端。

cookieA-pathcookieB-path
/工程路径/cookieServlet/工程路径/
cookie对象请求路径能否发送
cookieA/工程路径
cookieB/工程路径
cookieA/工程路径/cookieS
cookieB/工程路径/cookieS
protected void testPath(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.生成cookie对象
        cookie cookie = new cookie("path","path");
        //2。设置其path路径
        cookie.setPath(req.getContextPath()+"cookieS");
        //3.通知客户端
        resp.setContentType("text/html;charset=utf-8");
        resp.addcookie(cookie);
        //4.回传消息
        resp.getWriter().println("path路径设置完成");
    }
8、免用户名登录 A.Step

B.Code

protected void login(HttpServletRequest req, HttpServletResponse resp) throws Exception {
        //获取参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //判断系统是否存在该用户
        User user = us.login(username, password);
        //不存在该用户
        if (user == null) {
            req.setAttribute("errorMsg", "用户名和密码错误");
            req.setAttribute("username", username);
            req.setAttribute("password", password);
            req.getRequestDispatcher("/pages/user/login.jsp").forward(req, resp);
            return;
        }
        req.getSession().setAttribute("user", user);
        cookie cookie = new cookie("username", user.getUsername());
        resp.setContentType("text/html;charset=utf-8");
        resp.addcookie(cookie);
        req.getRequestDispatcher("pages/user/login_success.jsp").forward(req, resp);
    }
二、Session 1、什么是Session

规范HttpSession,用于维护客户端与服务端一次连接过程中所需要维护的信息,如客户端与服务端连接的唯一标识id、客户端登录成功后的用户信息。session存储在服务端。

2、创建和获取Session对象

request.getSession()获取该请求Session对象。
第一次请求则该操作是创建并获取Session对象,否则是获取当前Session对象。
1)如何判断是否为创建?request.getSession().isNew()

3、存储、获取信息
HttpSession session = request.getSession();
User user = new User("username","password");
session.setAttribute("user",user);
user = session.getAttribute("user");
4、可控Session对象的生命周期
		HttpSession session = req.getSession();
        //获取session超时时长
        session.getMaxInactiveInterval();
        //设置session超时时长为1小时,负数表示永不销毁。
        session.setMaxInactiveInterval(60 * 60);
        //让session马上无效
        session.invalidate();

Tomcat的web.xml中配置了超时时长,如果想修改该项目中所有的session默认时长,就可以改idea整合tomcat下的web.xml

    
        30
    

三、为什么能通过请求获取session

一旦session对象创建,则每次response都会让客户端添加cookie对象,该对象的存了session的唯一标识符id,而每次请求都会带上该cookie对象,所以服务端能根据传过来的cookie对象中的id来找到当前连接的session对象。

总结

1)cookie存入客户端(浏览器)
2)session存入服务端(Tomcat)
3)通过cookie对象来寻找Session对象。

参考文献

[1] JavaWeb 尚硅谷

附录 1、cookie.html







cookie
	



	
	


2、session.html



    
    
    
    
    Session
    
    






转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643546.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号