cookie的存活时间变成了3天
需要注意: Cookie不能直接存储中文,要通过转码(URL编码,encode()/decode())
扩展: 可以通过生命控制实现cookie的删除
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //找到要删除的Cookie对象 Cookie findKey = CookieUtils.findCookie("findKey", req.getCookies()); if (findKey != null){ //调用setMaxAge(0) findKey.setMaxAge(0); //马上删除,不用关闭浏览器 //修改后生效 resp.addCookie(findKey); } }
2.5 Cookie有效路径Path设置
Cookie的Path属性可以有效的过滤哪些Cookie可以发送给服务器, 哪些不发( Path 属性是通过请求的地址来进行有效的过滤 )
规则:
cookieA.setPath = /工程路径
cookieB.setPath = /工程路径/abc
1.当请求地址为: http://localhost:800/工程路径/资源 时
cookieA会发给服务器而cookieB不会发给服务器
2.当请求地址为: http://localhost:8080/工程路径/abc/资源
cookieA、cookieB都会发给服务器
3 Session会话技术
3.1 初探Session
Session是服务端会话跟踪技术。
用户登录网站后,不管该用户浏览该网站的哪个页面,都可显示登录人的名字, 还可以随时去查看个人信息等等。即,一个用户在浏览网站不同页面时,通过Session,服务器可以知道是哪个用户在访问该页面并且做出反馈。
Session是一个接口,HttpSession
Session 就是会话,是用来维护客户端和服务器之间关联的一种技术
每个客户端都有一个Session会话
Session会话中,经常保存用户登录后的信息。
当用户打开浏览器,访问某个网站, 操作session时服务器就会在内存(在服务端)为该浏览器分配一个session 对象,该session对象被这个浏览器独占
3.2 Session的创建、获取与基本使用
创建与获取Session的API相同:
request.getSession(); 1
第一次调用:创建Session会话
往后:获取创建好的Session会话对象
通过isNew()方法,可以判断该Session是否为新对象。
每个会话都具有一个号码id值,且该id唯一! 通过 getId()可以获取Session会话对象的id值。
基本使用总结:
//1.创建和获取 Session HttpSession hs=request.getSession(); //2.向session 添加属性 hs.setAttribute(String name,Object val); //3.从session 得到某个属性 Object obj=hs.getAttribute(String name); //4.从session 删除某个属性 hs.removeAttribute(String name); //5.判断是不是刚创建出来的Session boolean flag = hs.isNew(); //6.每个Session都有唯一标识id值,通过getid() 得到Session的会话id 值 hs.getId();
3.3 Session的生命控制与生命周期
Session不能长时间保存数据,浏览器关闭后再获取的不是同一个Session对象。
通过setMaxInactiveInterval(int interval)可以设置Session的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁。值为正数的时候,设定Session的超时时长,负数则表示永不超时。
相应的getMaxInactiveInterval()可以获取Session的超时时间,而invalidate() 可以让当前 Session 会话立即无效
默认情况下:
Tomcat会以 Session 默认时长为准,Session 默认的超时为 30 分钟,可以在 tomcat的web.xml 设置,代码和图示如下:
<session-config> <session-timeout>30</session-timeout> </session-config>
补充知识:
Session的钝化与活化
钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
活化:再次启动服务器后,从文件中加载数据到Session中
对Session生命周期的理解:
与Cookie的生命周期不同的是,Session的生命周期指的是客户端/浏览器两次请求最大间隔时长,而不是累积时长。
如果在允许的间隔时间内,客户端访问了自己的session,则会从0重新计时。
3.4 如何理解Session底层是基于Cookie实现的?
在浏览器没有任何Cookie信息时,向服务端发送请求的时候,会通过request.getSession()创建会话对象。服务器每次创建会话对象的时候,都会创建一个Cookie对象,其Key是:JSESSIONID,Value是新创建的Session的id值。
于是,服务端通过响应的方式把新创建的Session的id返回给客户端,当浏览器解析到数据后,马上就会创建一个Cookie对象。
而后,浏览器已经有了相应的Cookie信息,每次请求,都会把Session的id以Cookie的形式发送给服务器,而服务器则会通过id值找到之前创建好的Session对象并返回。
示意图如下: