JavaEE基础四之会话追踪(Session、Cookie等)

  • 会话跟踪概述(Session)

    • 会话的概念与作用

      • 会话:浏览器与服务器一次连续的通讯过程,包含多次请求

        浏览器访问-》访问页面-》关闭浏览器

      • 应用场景: 常常需要记住一些状态信息

        • 访问控制:下载文档必须先登录
        • 简化登陆:一定时间不再需要重新登陆
        • 分页
    • 常用会话跟踪技术–包括session、cookie、input、url等

      目前唯一方法:每次向服务器发送请求,主动携带身份令牌信息。这个非常的有用,也非常的灵活。

      • URL方式:需要保存的信息直接追加到URL后。

        例http://localhost:8080/viewList?pageNo=1—分页

      • 隐藏域方式:使用表单隐藏域保存相关信息。每次跳转的时候将会话要记录的信息带过去,下次请求再带回来。

        例—表单防重复提交

      • Cookie方式:状态信息保存到客户端,服务器能够获得相关信息进行分析,从而生成对客户端的响应

        例简化登陆功能可以使用Cookie方式实现–记住密码

      • Session方式:将状态信息保存到服务器会话对象中,通过唯一标记ID与客户端绑定使用

        例访问控制功能 使用Session实现

        例访问控制

        • HTML标签中的data属性

          这个嘛,再说。

  • Cookie

    • Cookie的功能与特性

      • Cookie:一段保存在客户端的小文本;能够将用户活动过程中的状态信息保存到客户端,服务器可获得信息以便处理,跟踪用户状态
      • Chorme浏览器端查看Cookie:点击URL前的@图标查看Cookie信息
    • Cookie的域及最大生命时间

      • Cookie的一系列属性
        • name :cookie的名字,每个cookie都有一个名字
        • content:cookie的值,与name作为键值对形式存在
        • domain:域,cookie的域名 例 csdn.net
        • path:路径,例访问csdn.net下该路径时,当前cookie将被发送
        • created:cookie被创建时间
        • expired:cookie失效时间
        • 最大生命时间:expired-created 超过时间将失效,不再发送
    • Servlet中创建Cookie、设置Cookie属性

      Cookie(String name,String value) //创建Cookie对象,指定名和值
      setMaxAge(int expiry)//设置最大生命时间(秒),默认当前浏览器关闭,cookie失效
      setValue(String newValue) //设置Cookie值
      setDomain(String domain)  //设置cookie域名
      
      //例子 1.创建cookie
      Cookie username=new Cookie("username","zhw");
      Cookie pwd=new Cookie("pwd","abc123");
      
      //2.设置cookie生命时间,24小时内有效
      username.setMaxAge(24*3600);
      pwd.setMaxAge(24*3600);
      
      //3.存入客户端--我的反向例子就是这样
      response.addCookie(username);
      response.addCookie(pwd);
      
    • 响应中设置Cookie信息

      • 想将Cookie保存到客户端,需要将其添加到响应对象
      • 响应接口中定义了设置Cookie的方法
        • addCookie(Cookie cookie) //将Cookie对象保存到相应的响应对象中
    • 获取请求中的Cookie信息

      • 当访问相同域及路径时,没有超过有效时间的cookie将自动通过请求发送到网站
      • 请求接口中定义了获取Cookie对象的方法
        • getCookies() //获取请求中所有Cookie对象,返回数组
    Cookie[] cookies=request.getCookies();
    if(cookies==null){
      out.println("没有cookie");
    }
    //通过遍历cookie
    for(Cookie c:cookies){
      	out.println(c.getName()+"="+c.getValue());
    }
    
  • Session

    • Session简介

      • 常用策略:浏览器端–cookies保存sessionId 服务器端—开辟一个Session对象,保存身份数据。利用会话型Cookies分发令牌,构建Session对象。
      • 客户端与服务器每一次会话都创建并维护一个Session对象
      用户访问网站-》服务器从请求中查找名为JSESSIONID的cookie
      	不存在:创建新的Session对象,为其生成ID值,并存入JSESSINOID的cookie中
      		并将新创建的Session对象提供给本次会话使用
           存在:找到JSESSIONID的cookie,获取值,以该值为ID,查找对应的Session对象给本次会话使用
      
    • 自定义Session实现方式

      • 第一次发送请求,服务端开辟一个内存,通过Cookie设置sessionid,每次请求通过cookie发送sessionId
    • HttpSession对象的获取

      • HttpSession接口
        • getSession() 获取与当前请求相关的Session对象,如果不存在,创建新的Session
    • Session属性的添加、修改、删除、及Session失效的方法

      • 增删改属性 同request的API
      • Session失效
        1. 当Cookie失效 Session随之失效
        2. 当Session时间过期,session在服务端失效
  • 简化登录

    • LoginServlet中,通过用户选择,创建Cookie,并指定有效时长存入响应中

      • 创建Cookie并添加到客户端去 具体见上面
        • 也就是说,在用户登录时,如果勾选了记住密码,那么就创建Cookie并添加到客户端中,如果下次登录存在cookie,那么就直接请求登陆就行了。
    • 登录页面index.jsp获取Cookie进行登录验证

      Cookie[] cookies=request.getCookies();
      if(cookies!=null){
        for(Cookie cookie:cookies){
          if(cookie.getName().equals("username")){
            username=cookie.getValue();
          }
          if(cookie.getName().equals("password")){
            password=cookie.getValue();
          }
        }
      }
      <!--如果用户名和密码都不为空,那么直接请求转发到登录请求,这里通过url携带身份令牌-->
      if(username!=null&&password!=null){
        request.getRequestDispatcher("./loginServlet?username="+username+"&pwd="+password).forward(request,response);
      }
      
      这里出现的问题就是,密码暴露。。。。
      

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值