Cookie && Session

一、Cookie

1、Cookie
  • Cookie是服务器通知客户端保存键值对的一种技术。
  • 客户端有了Cookie后,每次请求都发送给服务器。
  • 每个Cookie的大小不能超过4kb
2、创建Cookie
//创建cookie对象
Cookie cookie = new Cookie( "key","value");
//通知客户端保存Cookie
resp.addCookie(cookie);
3、服务器获取Cookie
Cookie[] cookies = req.getCookies();

getkey()
getValue()

可以将查找Cookie的过程提取成一个Uitl方法。

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
// 方案一
    //1、先创建一个要修改的同名的Cookie对象
    //2、在构造器,同时赋于新的Cookie值。
    Cookie cookie = new Cookie("key1" , "newValue1");
    //3、调用response.addCookie(Cookie);通知客户端保存修改
    resp.addCookie(cookie);
// 方案二
    //1,先查找到需要修改的Cookie对象
    Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());
    if(cookie != null) {
        //2,调用setvalue()方法赋于新的cookie值。
        cookie.setvalue( "newValue2");
        //3,调用response.addcookie()通知客户端保存修改
        resp.addCookie(cookie);
    }

在创建cookie之后将新值分配给cookie。如果使用二进制值,则可能需要使用BASE64编码。

5、Cookie生命周期
setMaxAge()  //设置最大生命周期
    //正数:指定秒数之后删除
    //负数:浏览器关闭之后删除
    // 0  :马上删除
6、Cookie有效路径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发送

二、Session

1、session
  • Session是一个接口(HttpSession)。
  • Session就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。
  • 每个客户端都有自己的一个sessibn会话。
  • Session会话中,我们经常用来保存用户登录之后的信息。
2、Session的创建和获取
// 创建和获取session。它们的API是一样的。
HttpSession session = request.getSession();
	//第一次调用是:创建session会话
	//之后调用都是:获取前面创建好的session会话对象。
isNew(); //判断到底是不是刚创建出来的(新的)
		//true表示刚创建
		//false表示获取之前创建

//每个会话都有一个身份证号。也就是ID值。而且这个ID是唯一的。
getld();  //得到session的会话id值。
3、Session域数据的存取
getAttribute()
setAttribute()
4、Session生命周期
setMaxInactiveInterval(int)  //秒为单位
    //负数,永不超时
getMaxInactiveInterval(int)
    
invalidate()  //使当前session会话马上超时无效

Session默认的超时时长为30分钟。

因为在Tomcat服务器的配置文件web.xml中默认有以下的配置,它就表示配置了当前Tomcat服务器下所有的session超时配置默认时长为:30分钟。

<session-config>
	<session-timeout>30</session-timeout>
</session-config>

Session超时指的是客户端两次请求的最大间隔时长。

5、浏览器和Session之间关联的技术内幕
  • Session技术的底层其实是基于Cookie技术来实现的。

image-20200916100348568

原文地址:https://www.cnblogs.com/nojacky/p/13906168.html