Java_Web会话

Cookie

基本使用

1.创建对象,设置数据

Cookie cookie = new Cookie("key","value");

2.发送Cookie到客户端:使用response对象

response.addCookie(cookie);

3.获取客户端携带的Cookie,使用request对象

 Cookie[] cookies = request.getCookies();

4.遍历数组,获取每一个Cookie对象

for (Cookie cookie : cookies) {
}

5.使用Cookie对象方法获取数据

String value = cookie.getValue();
基本使用演示

Aervlet.java发送Cookie

//        1.创建Cookie
        Cookie cookie = new Cookie("username","zs");
//        2.发送cookie
        response.addCookie(cookie);

Bservlet.java接收cookie

//        1.获取Cookie数组
        Cookie[] cookies = request.getCookies();
//        2.遍历数组
        for (Cookie cookie : cookies) {
//            3.获取数据
            String name = cookie.getName();
            if("username".equals(name)){
                String value = cookie.getValue();
                System.out.println(name + ":" + value);
                break;
            }
        }

Cookie原理

  • 响应头: set-cookie
  • 请求头: cookie
    • AServlet给前端发送Cookie,BServlet从request获取Cookie
    • AServlet响应数据时,Tomcat服务器基于HTTP协议来响应数据
    • Tomcat发现后端要返回一个Cookie对象之后,会在响应头添加 Set-Cookie:username=zs
    • 当浏览器再次发送请求给BServlet时,浏览器会自动在请求头添加Cookie:username=zs发送给服务器端BServlet
    • Request对象会把请求中cookie对应的值封装一个Cookie对象,最终保存在一个数组中
    • BServlet通过Request对象获取到cookie数组后,就可以获取到需要的数据

Cookie存活时间

默认情况,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁

setMaxAge(int seconds)
1.正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储,到期后自动删除
2.负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
3.零:删除对应Cookie

//发送Cookie
//1. 创建Cookie对象
Cookie cookie = new Cookie("username","zs");
//设置存活时间 ,1周 7天
cookie.setMaxAge(60*60*24*7); //易阅读,需程序计算
//cookie.setMaxAge(604800); //不易阅读(可以使用注解弥补),程序少进行一次计算
//2. 发送Cookie,response
response.addCookie(cookie);

Cokkie中文乱码

Cookie不能直接存储中文

1.在AServlet中对中文进行URL编码,采用URLEncoder.encode(),将编码后的值存入Cookie中
2.在BServlet中获取Cookie中的值,获取的值为URL编码后的值
3.将获取的值在进行URL解码,采用URLDecoder.decode(),就可以获取到对应的中文值
AServlet.java中文编码

String value = "张三";
//对中文进行URL编码
value = URLEncoder.encode(value, "UTF-8");
System.out.println("存储数据:"+value);
Cookie cookie = new Cookie("username", "value");
//设置存活时间 
cookie.setMaxAge(60 * 60 * 24 * 7); 
//2. 发送Cookie,response
response.addCookie(cookie);

BServlet.java解码

//获取Cookie
//1. 获取Cookie数组
        Cookie[] cookies = request.getCookies();
//2. 遍历数组
        for (Cookie cookie : cookies) {
//3. 获取数据
            String name = cookie.getName();
            if ("username".equals(name)) {
                String value = cookie.getValue();//获取的是URL编码后的值
//URL解码
                value = URLDecoder.decode(value, "UTF-8");
                System.out.println(name + ":" + value);//value解码后为 张三
                break;
            }
        }

Session基本使用

Session:服务器会话跟踪技术:将数据保存到服务器端

  • 获取Session对象,使用request
  • session对象提供的功能
    • 存储数据到session中
      void setAttribute(String name,Object o)
      
    • 根据key获取值
      Object getAttribute(String name)
      
    • 根据key删除值
      Object removeAttribute(String name)
      

Session基本演示

sessionDemo1.java

  //1.获取Session对象
HttpSession session = request.getSession();
  //2.存储数据
session.setAttribute("username","zs");

sessionDemo2.java

//获取数据,从session中
//1. 获取Session对象
    HttpSession session = request.getSession();
//2. 获取数据
    Object username = session.getAttribute("username");
    System.out.println(username);
}

Session原理

1.demo1在第一次获取session对象的时候,session对象会有一个唯一的标识
2.demo1在session中存入数据并处理完所有业务以后,通过Tomcat服务器响应结果给浏览器
3.Tomcat发现业务处理中使用了session对象,就会把session的唯一标识当作一个cokkie,添加Set-Cookie:JESSIONID=唯一标识 到响应头中,并响应给浏览器
4.浏览器就收到响应之后,就会把响应头中的cookie数据存储到浏览器的内存中
5.浏览器在同一会话访问demo2的时候就会把cookie中的数据按照cookie:JESSIONID=唯一标识添加到请求头并发送给服务器
6.demo2获取到请求之后,从请求头读到唯一标识,就会到服务器内存中寻找的对应的session对象,如果找到了就直接返回该对象,没有则会新创建一个session对象
7.关闭浏览器重新打开之后,cookie对象已被销毁,服务器端获取的是一个全新的session对象

总结:Session是基于Cookie来实现的

Session钝化与活化

钝化:在服务器正常关闭以后,Tomcat会自动将session数据写入磁盘

  • 钝化的数据路径为: 项目目录\target\tomcat\work\Tomcat\localhost\项目名称 \SESSIONS.ser
    活化:再次启动服务器以后,从文件加载数据到session中,加载之后.ser文件自动被删除

Session销毁

1.默认情况下,30分钟自动销毁

  • 配置文件web.xml中配置
  • <session-config>
    <session-timeout>100</session-timeout>
    </session-config>
    
    2.调用Session对象的invalidate()进行销毁
session.invalidate();

会话总结

Coojie和Session都是来完成一次会话内多次请求间数据共享的
区别

  • 存储位置:Cookie将数据存储在客户端 Session存储在服务端
  • 安全性:Cookie不安全 Session安全
  • 数据大小:Cookie最大3KB,Session无大小限制
  • 存储时间:Cookie可以通过setMaxAge()长期存储,Session默认30分钟
  • 服务器性能:Cookie不占服务器资源,Session占用服务器资源

应用场景:

  • 购物车:使用Cookie来存储
  • 以登录用户的名称展示:使用Session来存储
  • 记住我功能:使用Cookie来存储
  • 验证码:使用session来存储

结论

  • Cookie是用来保证用户在未登录情况下的身份识别
  • Session是用来保存用户登录后的数据

会话案例-登录注册

需求说明

1.完成用户登录功能,如果用户勾选“记住用户”,则下次访问登录页面自动填充用户密码
2.完成注册功能,并实现验证码功能

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值