day17 回话跟踪技术Cookie与Session

会话跟踪技术

问题:一次会话中的多次请求不会共享数据,不能显示.若通过传参数在路径上来解决该问题,不安全.

作用:解决HTTP无状态

http,cookie,session使用的区别

如果使用http中的request.setAttribute(),只能一次共享一个

若使用cookie,cookie存在浏览器中,每一次请求都会带上这个cookie

若使用session,里面的session存在服务器中,在这个会话中都能取到

cookie(客户端技术,里面携带的是属性,键值对)

1.cookie在服务端中创建

2.cookie从服务端 带到 浏览器

3.cookie最终存储在浏览器中

4.cookie共享数据的时间:再一次分文服务器资源时

5.cookie数据传递方向:浏览器–>服务器(cookie)–>浏览器(存入)–>服务器(获取cooKies)

cookie的基本使用
cookie特级别总结:

1.一个cookie只能在相同的域和路径下访问,有servlet访问jsp访问

2.只需要在访问的servlet中new一个cookie对象,必须使用addCookie响应给浏览器才能奏效

3.获取到cookie里面的之后可以使用setvalue修改值

1.服务器创建cooKie对象

Cookie cookie = new Cookie(String name, String value);
name:共享数据的名称(唯一)
value:要共享的数据

2.服务器响应cookie给浏览器

resp.addCookie(cookie)

3.服务器获取cookie

浏览器发送请求时,会自动将cookie发送到服务器,此时cookie中有很多键值对

可以通过遍历获得想要的cookie

**getname:**获取一个cookie的名字

**getvalue:**获取cookie中的数据

Cookie[] cookies = req.getCookies();
在servlet中获取cookie数据

此时需要将数据继续共享,下一个地方才可以获得该数据

Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
    if ("username".equals(cookie.getName())){
        System.out.println(cookie.getValue());
        //共享数据到下一个页面
        req.setAttribute("username",cookie.getValue());
        }
        }
在JSP中获取Cookie数据

使用El表达式

${cookie.username.value
修改cookie中的数据

需要调用cookie中的setValue方法

再重新创建同一个名称的cookie对象进行共享

Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
    if ("username".equals(cookie.getName())){
        System.out.println(cookie.getValue());
        //将服务器中的的cookie属性修改为muling
        cookie.setValue("muling");
        //将修改后的cookie对象重新响应给浏览器
        resp.addCookie(cookie);
    }
}
设置cookie的存活时间(以秒进行计算)

cookie默认的存活时间是当浏览器关闭的时候销毁

设置存活时间:cookie.setMaxAge(10)

立即删除当前cookie对象:cookie.setMaxAge(0)

cookie 的分类(在客户端中)

内存cookie:关闭浏览器消失

硬盘cookie:手工清理或到期

删除cookie

设置存活时间,一般是在中途删除cookie,要将删除后的cookie重新更新到浏览器

cookie.getMaxAge(0);
resp.addCookie(cookie);
cookie的域和路径的作用

让浏览器识别cookie并发送给服务器

域:识别服务器

路径:识别资源

cookie的应用场景

1.记录用户信息,解决HTTP无状态问题

2.登录时记住用户名

3.未登录实行购物车

cookie存在的问题

1.多个人使用同一台电脑不安全

2.tomcat8.5以下存中文麻烦\

3.一个cookie只能设一个值,String类型

4.服务器在客户端存的cookie数量有限

session(服务端技术,会话域)

1.在服务器创建

2.存在服务器

3.再一次访问服务器资源时实现数据共享

4.数据方向:浏览器–>服务器(session)–>数据在服务器

服务器识别不同用户session的方法

使用浏览器中cookie存储的sessionId来进行识别(使用会话cookie)

底层就是使用cookie传递session的id值

req

获取sesson
方法作用
req.getSession()判断是否存在session(浏览器是否携带了sessionId),有则获取,没有就重新创建
数据共享方法
方法作用
setAttribute(String name,Objiect value )设置属性名和属性值
getAttribute(String name)获取共享的属性值
removeAttribute(name)从session中删除该属性值
invalidate()删除整个session对象
在servlet中获取Session数据
req.getSession.getAttribute(session)
在jsp中获取session数据

使用el表达式进行数据的获取,"user_in_session"是共享的session 名称,这样session的命名更规范

${user_in_session}
session的超时管理

默认情况下session只在tomcat]保留30分钟,超过设定得时间,所有的session就会销毁

在service()中设置超时管理,在实现共享数据之前

局部修改

修改web.xml文件,添加超时管理标签,时间按照分钟计算

<session-config>
	<session-timeout>10</session-timeout>
</session-config>

局部修改

在创建servlet中的指定session下面添加超时管理,时间按秒计算

//使用session获取共享数据
HttpSession session = req.getSession();

//设置session超时时间,只要10秒钟之后还没有任何操作,此时销毁session,重新登录,在content页面操作的
session.setMaxInactiveInterval(10);
//仍然将数据共享出去
session.setAttribute("username",username);
servlet中的url重写

重写原因:用户故意禁用所有的cookie,session 就接收不到cookie所携带的sessionId

response.encodeURL("/session/list")

在jsp中url重写

${pageConttext.response.encodeURL("/session/list")}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jrphyXdl-1684897254927)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230416162408442.png)]

重写url后,请求的url后面就会拼接jsessionId(可以自动检测是否开启cookie接收,未开启则自动拼接)

ionId

response.encodeURL("/session/list")

在jsp中url重写

${pageConttext.response.encodeURL("/session/list")}

重写url后,请求的url后面就会拼接jsessionId(可以自动检测是否开启cookie接收,未开启则自动拼接)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值