【JavaWeb】Cookie和Session的学习
注:本文章基于尚硅谷JavaWeb相关视频及资料进行编写,代码简单,较容易理解,若有问题或者源码资料获取可以在评论区留言或者联系作者!
文章目录
- 一、cookie
-
- (1)cookie的创建:
- (2)cookie的获取:
- (3)cookie值的修改:
- (4)Cookie的生命控制
- (5)Cookie有效路径Path的设置:
- (6)Cookie练习之免用户名登录
- 二、session
-
- (1)什么是session?
- (2)创建和获取session:
一、cookie
cookie是服务器通知客户端保存键值对的一种技术;
客户端有了cookie以后,每次请求都将cookie发送给服务器
每个cookie的大小不超过4kb
(1)cookie的创建:
//1、创建Cookie对象Cookie cookie =new Cookie("key1","value1");//解决相应乱码resp.setContentType("text/html;charset=UTF-8");//2.通知客户端保存resp.addCookie(cookie)resp.getWriter().write("cookie创建成功");//3.
(2)cookie的获取:
Cookie[] cookies=req.getcookies();for(Cookie cookie:cookies){ resp.getWriter().write(cookie)}
(3)cookie值的修改:
方案一(覆盖):
- 先创建一个要修改的同名的cookie对象
- 在构造器,同时赋予新的Cookie值
- 调用response.addCookie(Cookie);
Cookie cookie=new Cookie("key1","new value1")resp.addcookie(cookie);
方案二(更新):
- 先创建一个要修改的cookie对象;
- 调用setValue()方法赋予新的Cookie值;
- 调用response.addCookie(Cookie),通知客户端保存修改;
Cookie cookie=CookieUtils.findCookie("key2",req.getCookies());if(cookie!=null){cookie.setValue("newValue2");resp.addCookie(cookie);}
(4)Cookie的生命控制
cookie的生命控制指的是如何管理Cookie,什么时候被销毁(删除)
setMaxage()
:
- 正数:表示在指定的秒数后过期
- 负数,表示浏览器一关,Cookie就会被删除(默认)
- 零,表示马上删除Cookie
(5)Cookie有效路径Path的设置:
cookie的path属性可以有效地过滤哪些Cookie可以发送给服务器,哪些不发;
path属性时通过请求的地址来进行有效的过滤;
`setPath(req.getcontextpath+“自定义路径”):
(6)Cookie练习之免用户名登录
二、session
(1)什么是session?
1.session是一个接口(HttpSession)
2. session就是会话;它是用来维护一个客户端和服务器之间关联的一种技术;
3.每个客户端都有自己的session会话
4.session会话中,我们经常用来保存用户登录后的信息;
5.4个域对象之一
(2)创建和获取session:
创建和获取session。它们的API都是一样的
reuqest.getsession()
第一次调用,创建session会话
之后调用都是获取前面创建好的session会话对象;
isNew()
用于判断是不是刚创建出来的(新的)
true:表示刚创建
false:表示获取之前创建;
每个会话都有一ID值,而且这个ID是唯一的;
getId()得到Session的会话id值;
session域中数据的存储
//存request.getSession().setAttribute(key,value)//取request.getSession().getAttribute(key)
(3)Session的生命周期控制:
设置Session的超时时长,以秒为单位,超过固定的时长,就会过期;默认时长是1800s(30分钟);因为在 tomcat的配置文件web.xml中默认有以下配置,他就默认了当前Tomcat服务器下所有的Session超时配置为30分钟
request.getSession().getMaxInactiveInterval()
如果说,如果希望自己的web工程默认的Session的超时时长为其他时长,可以在自己的web.xml配置文件中做以下和web.xml文件中相同的配置;
<!-- 这里设置默认时长为20分钟--!><session-config><session-timeout>20</session-timeout><session-config>
如果只想修改个别的session超时时长,可以使用以下API:
//设置超时时间为3srequest.getSession().setMaxInactiveInterval(3)
注意:session的超时指的是客户端发给服务器两次请求最大的间隔时长(也就是说在超时时间范围内若不断有请求,超时时间倒计时就会一直被重置)
超时时长为负数表示永不超时(极少使用)
让当前session会话马上超时无效:
session.invalidate()
(5)浏览器和服务器Session之间关联的技术内幕:
Session技术底层实际上是基于Coookie技术来实现的;
如果感觉内容写的还不错的话,一键三连不迷路!!!!
后面将会更新更多学习内容,一起学习吧!!!!!!