企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
# 什么是会话 用户开一个浏览器访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源.直到用户关闭浏览器,或者服务器关闭,这整个过程我们称作一次会话. # cookie ## 工作原理 * 浏览器访问服务器,服务器产生键值对形式的cookie. * 通过响应(响应头set-cookie)返回给浏览器. * cookie保存在浏览器上,下次访问服务器的时候根据一定的规则携(指的就是cookie的路径)带不同的cookie,通过请求(请求头cookie)携带,服务器就可以拿到这些cookie. * cookie不支持中文. * cookie不能跨浏览器. * cookie销毁后会删除所有保存在里面的数据. ## 设置cookie ~~~ //创建cookie Cookie cookie = new Cookie("name", "jack"); //写回浏览器 response.addCookie(cookie); ~~~ ## 获取cookie * 获取cookie的名称:getName(). * 获取cookie的value:getValue(). ~~~ Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie c : cookies) { if ("name".equals(c.getName())) { System.out.println(c.getValue()); } } } ~~~ ## 设置cookie在浏览器端的存活时间和路径 * 单位是秒,如果秒数为0,则删除cookie(前提是,必须路径相同). * 默认路径: 从根路径到最后一个"/" 结束. 如在"/dome/user/login" 路径下设置的cookie,默认路径是"/dome/user" * 同一路径下不能有重名的cookie,否则会被覆盖. * 当方位的URL包含此cookie的path的时候就会携带这个cookie,反之不会. 假如cookie路径是/aa/bb/cc,那么访问/aa/bb/cc/dd,/aa/bb/cc是会携带这个cookie的,如果访问/aa/bb或者/cc/dd是不会携带这个cookie的. ~~~ cookie1.setMaxAge(300); //单位是秒,这里是5分钟 cookie1.setPath("/user/login"); //设置cookie的路径 ~~~ ~~~ Cookie cookie1 = new Cookie("akey", "avalue"); Cookie cookie2 = new Cookie("bkey", "bvalue"); Cookie cookie3 = new Cookie("ckey", "cvalue"); Cookie cookie4 = new Cookie("ckey", "dvalue"); //设置cookie的路径(注意:同一路径下不能有重名的cookie,有的话会被覆盖,不同路径下可以有重名的cookie) cookie3.setPath(request.getContextPath()+"/user/register"); response.addCookie(cookie1); response.addCookie(cookie2); response.addCookie(cookie3); response.addCookie(cookie4); ~~~ 访问/dome/user/info 可以获取1,2,4的cookie. 访问/dome/user可以获取1,2,3,4的cookie.访问/dome/user/register可以获取1,2,3,4的cookie. ## 删除cookie 1. new 一个新cookie,路径和name和要删除的cookie一致,max-age 设置为0,写回浏览器即可进行删除. # session ## 工作原理 1. 浏览器向服务器发送请求. 2. 服务器判断浏览是否携带了唯一标识. 3. 若有标识:服务器去查询session池中是否有对应的标识.若有:直接操作session对象,并把它存入浏览器.若无:服务器会为其创建一个私有的内存空间,可以操作session,把它存放到浏览器端. 4. 若无标识:服务器会为其创建一个私有的内存空间,可以操作session,把它存放到浏览器端(依赖cookie). 5. 创建时机:第一次调用request.getSession()的时候. 6. 销毁时机: 1.服务器非正常关闭(正常关闭不会丢). 2.超时销毁:tomcat默认是30分钟. 3.手动销毁. sessionid是保存在cookie中的,如果cookie没有设置存活时间,那么每当浏览器关闭之后重新打开这个网页会创建一个新的sessionid.如果cookie设置了存活时间,那么就会保留这个sessionid. ## 方法 获取session ~~~ HttpSession session = request.getSession(); ~~~ 获取sessionID ~~~ session.getId(); ~~~ 设置session存活时间 ~~~ session.setMaxInactiveInterval(秒); ~~~ # 实例 ## 获取上次访问时间 ~~~ response.setContentType("text/html;charset=utf-8"); Cookie[] cookies = request.getCookies(); Cookie co = null; if (cookies != null) { //查找cookie for (Cookie c : cookies) { if ("lastTime".equals(c.getName())) { co = c; } } } //判断是否存在cookie if (co != null) { response.getWriter().print("您上次的访问时间为:" + co.getValue()); } else { response.getWriter().print("欢迎访问"); } DateFormat dateInstance = DateFormat.getDateInstance(); String format = dateInstance.format(new Date()); Cookie cookie = new Cookie("lastTime", format); cookie.setMaxAge(3600); response.addCookie(cookie); ~~~