Cookie和Session

什么是Cookie

1、个人理解: 缓存
2、Cookie 是服务器通知客户端保存键值对的一种技术。
3、客户端有了 Cookie 后,每次请求都发送给服务器
4、每个 Cookie大小不超过4KB

如何创建Cookie

请添加图片描述

Cookie cookie = new Cookie("KEY1","VALUE1");
        //通知客户端保存cookie
        resp.addCookie(cookie);
        resp.getWriter().write("创建成功!");

服务器如何获取

protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies=req.getCookies();
        for(Cookie cookie:cookies){
            //getName方法返回Cookie的键值
            resp.getWriter().write("Cookie+["+cookie.getName()+"="+cookie.getValue()+"]");
        }
    }

也是以数组的形式存储

Cookie的修改

protected void updateCookie1(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("KEY1","newValue1");
        resp.addCookie(cookie);
        resp.getWriter().write("KEY1已经修改好了!");
    }

Cookie生命控制

Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁(删除)

setMaxAge()
正数,表示在指定的秒数后过期
负数,表示浏览器一关,Cookie 就会被删除(默认值是-1)
零,表示马上删除 Cooki

/**
* 设置存活 1 个小时的 Cooie
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void life3600(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
Cookie cookie = new Cookie("life3600", "life3600");
cookie.setMaxAge(60 * 60); // 设置 Cookie 一小时之后被删除。无效
resp.addCookie(cookie);
resp.getWriter().write("已经创建了一个存活一小时的 Cookie");
}



/**
* 马上删除一个 Cookie
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
// 先找到你要删除的 Cookie 对象
Cookie cookie = CookieUtils.findCookie("key4", req.getCookies());
if (cookie != null) {
// 调用 setMaxAge(0);
cookie.setMaxAge(0); // 表示马上删除,都不需要等待浏览器关闭
// 调用 response.addCookie(cookie);
resp.addCookie(cookie);
resp.getWriter().write("key4 的 Cookie 已经被删除");
}
}



/**
* 默认的会话级别的 Cookie
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
Cookie cookie = new Cookie("defalutLife","defaultLife");
cookie.setMaxAge(-1);//设置存活时间
resp.addCookie(cookie);
}

sexMaxAge() 后,记得还是要加进去的

Cookie 有效路径 Path 的设置

Cookie 的 path 属性可以有效的过滤哪些 Cookie 可以发送给服务器、哪些不发。
path 属性是通过请求的地址来进行有效的过滤。

请求地址如下:
http://ip:port/工程路径/a.html
CookieA 发送
CookieB 不发送

http://ip:port/工程路径/abc/a.html
CookieA 发送
CookieB 发送

即:A包下有B包和a.html,B包又有b.html
如果是精确到B包,那么两个都发送;如果精确到A包,则b.html无法识别

免输入用户名

Session

  1. Session是一个接口(HttpSession)
  2. Session 会话,维护 客户端和服务器之间关联的一种技术
  3. 每个客户端都有自己的一个Session会话
  4. Session会话中,经常保存用户登陆之后的信息

如何创建Session和获取ID

API是一样的----request.getSession()
第一次调用: 创建
此后:调用之前创建好的

每个Session都有一个身份证号,ID唯一
getId() 得到 Session 的会话 id

Session域的数据存取

Session生命周期

public void setMaxInactiveInterval(int interval)设置 Session 的超时时间(以秒为单位
超过指定的时长,Session 就会被销毁。
值为正数的时候,设定 Session 的超时时长。
负数表示永不超时(极少使用)
public int getMaxInactiveInterval()获取 Session 的超时时间
public void invalidate()让当前 Session 会话马上超时无效。

Session 默认的超时时间长为 30 分钟。
因为在 Tomcat 服务器的配置文件 web.xml中默认有以下的配置,它就表示配置了当前 Tomcat 服务器下所有的 Session
超时配置默认时长为:30 分钟。
<session-config> <session-timeout>30</session-timeout> </session-config>
如果你想只修改个别 Session 的超时时长。就可以使用上面的 API。setMaxInactiveInterval(int interval)来进行单独的设
置。
session.setMaxInactiveInterval(int interval) 单独设置超时时长。

关于超时

请添加图片描述

第一次,建立起一个Seesion;该Session
每次点击是否为新建,都算一次请求。
所以很快的连续点击,所以都算两次之间 3s,所以返回false ,都是同一个会话
等得久一点,3s以上,那就算一个新的会话了。

例子:验证码

等待用户填写验证码,就是一个会话
如果长时间内没有填写发送短信的验证码,那么该网页的验证码就无效了。

浏览器和Session之间关联的技术内幕

请添加图片描述
1.每次服务器出现一个新的session,存在服务器内存中
2.返回去这个Sesion的ID给浏览器
3.ID被浏览器存在Cookie里面,以后每次要经过这个会话,就带着这个ID
4.服务器每次再看见这个ID,就知道去服务器内存里找到对应的Session
5.如果此时删除Cookie,那么浏览器就失去ID了,(也就是对应的Session失去引用了 )
(关闭浏览器后,每个Cookie默认是 Session域级别的 ,即生死伴随着浏览器 )
6.下次创建,又是重复。

总结 异同点:

安全性上, session的安全性高,cookie的信息存在浏览器端所以不安全
存储的类型, session 存储的类型是 Object, cookie 只能存字符串(并且需要进行编码处理)
存储大小, session 理论上没有限制(但不建议存储太多内容), cookie 的限制:每个cookie不能超过4k,每个网站cookie个数也有限制的
失效时间, session 两次请求间隔30分钟, cookie 默认关闭浏览器失效,还可以通过 maxAge 调整的更长

————————————————
版权声明:本文为CSDN博主「grey_mouse」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/grey_mouse/article/details/86572313

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值