什么是Cookie?
1.Cookie翻译过来是饼干的意思。
2.Cookie是服务器和客户端保存键值对的一种技术。
3.客户端有了Cookie后,每次请求都发送给服务器。
4.每个Cookie的大小不超过4kb
先写一个cookie.html页面:
页面效果:
我们先来解决cookie的创建:
要建立一个servlet来实现它的请求。
BaseServlet:
运行:
现在我们只发现了两个初始的Cookie值。
当我们点击创建Cookie的按钮时:
我们发现多出来了一个我们建立的Cookie.
我们不是一次只能创建一个Cookie,我们可以一次创建多个Cookie。
我们再点击一次创建cookie的按钮:
服务器获取客户端的Cookie只需要一行代码:req.getCookie():cookie[](会返回一个cookie数组)
点击Cookie获取按钮:
但是我们发现Cookie没法像 map一样通过获取key来直接输出对应的cookie。
那如果我们想只输出特定的cookie值应该怎么做呢?
这种循环查找特定cookie的方法以后会经常能够用上,所以我们可以写一个工具类来做这个方法。
所以我们之前的代码就不用写的那么复杂了:
方案一:
1.先创建一个要修改的同名的Cookie对象
2.在构造器,同时赋于新的Cookie值
3.通用response.addCookie(Cookie)
点击修改Cookie的按钮:
1.先查找到需要修改的Cookie对象
2.调用setValue()方法赋予新的Cookie值
3.调用response.addCookie()通知客户端保存修改
点击修改值的按钮:
注:
谷歌:
火狐:
Cookie的生命控制指的是如何管理Cookie什么时候被销毁(删除)
setMaxAge()
正数:表示在指定的秒数后过期
负数:表示浏览器一关,Cookie就会被删除(默认值是-1)
零:表示马上删除Cookie
setMaxAge(-1):
点击默认存活按钮:
出现了defalutLife的Cookie,当我们关闭浏览器时,再重新打开浏览器:
defalutLife被删除了。
setMaxAge(0):
点击立即删除:
我们发现Name为key4的Cookie直接就被删除了。
我们还可以设置Cookie的存活时间:
Cookie的path属性可以有效的过滤哪些Cookie可以发送给服务器,哪些不发。
path属性是通过请求的地址来进行有效的过滤。
CookieA path=/工程路径
CookieB path=/工程路径/abc
请求地址如下:
http://ip:port/工程路径/a.html
CookieA 发送
CookieB 不发送
http://ip:port/工程路径/abc/a.html
CookieA 发送
CookieB 发送
点击路径设置按钮:
我们发现因为路径不匹配,所以这个cookie并不会显示出来。
我们更改下符合要求的路径:
我们创建的cookie显示出来了。
细节和原理:
运行结果:
什么是Session会话?
1.Session就是一个借口(HttpSession)。
2.Session就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。
3.每个客户端都有自己的一个Session会话。
4.Session会话中,我们经常来保存用户登录之后的信息。
如何创建Session和获取(id号,是否为新)
如何创建和获取Session。它们的API是一样的。
request:getSession()
第一次调用是:创建Session会话
之后调用都是:获取前面创建好的Session会话对象。
isNew():判断到底是不是刚创建出来的(新的)
true:表示刚创建
false:表示获取之前创建
每个会话都有一个身份证号。也就是ID值。而且这个ID值是唯一的。
getId():得到Session的会话id值。
例:
前端html页面:
页面效果:
servlet:
修改前端页面:
运行结果:
点击创建和获取按钮:
我们就能获取Session的信息了。
运行结果:
点击存储按钮:
点击获取按钮:
public void setMaxInactiveInterval(int Interval)设置session的超时时间(以秒为单位),超过指定的时长,Session就会被销毁。
public int getMaxInactiveInteravl()获取Session的超时时间
值为正数的时候,设定Session的超时时长。
负数表示永不超时(极少使用)
public void invalidate()让当前Session会话马上超时无效。
Session默认的超时时长是多少?
运行结果:
Session默认的超时时长为30分钟。
因为在Tomcat服务器的配置文件web.xml中默认有以下的配置,它就表示配置了当前Tomcat服务器下所有的Session的超时配置默认时长为:30分钟
如果说,你希望你的web工程,默认的Session的超时时长为其他时长,你可以在你自己的web.xml配置文件中做以上相同的配置,就可以修改你的web工程所有Session的默认时长。
如果你想只修改个别Session的超时时长。就可以使用上面的API. setMaxInactiveInterval(int Interval)来进行单独的配置。
session.setMaxInactiveInterval(int Interval)单独设置超时时长。
运行结果:
点击获取Session按钮:
点击Session3秒超时销毁按钮:
3秒后我们再点击获取session按钮:
我们发现这个时候,session的状态是true。所以我们可以发现之前的session在3秒后已经销毁了,新的session第一次创建时状态为true。
public void invalidate()方法:
运行结果:
先获取Session
点击马上销毁按钮:
当我们再次获取新的Session的时候,就会新创建一个:
Session技术,底层其实是基于Cookie技术来实现的。