• web基础之会话技术


    一、会话技术之Cookie

    Cookie技术是将数据存储到客户端

    1.怎样去向客户端写出一个cookie

    1)创建Cookie对象

    Cookie cookie = new Cookie(name,value);

    2)向客户端写出cookie

    response.addCookie(cookie );

     

    客户端:客户端解析http响应,响应头中有一个cookie,客户端会自动将cookie的信息存储到客户端的缓存中

     

     

    2.怎样从客户端获取一个Cookie

    1)获得客户端携带的所有的cookie

    Cookies[]  request.getCookies();

    2)获得具体的某个cookie

    遍历所有的cookie

    通过getName()获得某一个cookie的名字

    通过getValue()获得某一个cookie的值

     

     

     

    3.显示用户上次的访问时间


     

    4.设置Cookie时的细节

    1)会话级别的cookie和持久级别的cookie

    会话级别的cookie:会话结束cookie就清空

    持久级别的cookie:会cookie存储到磁盘上

    保存在磁盘上的时间

    cookie.setMaxAge(秒);

    注意:如果要想删除磁盘已经存储的cookie

    将同名的cookie的持久化时间设置为0

    将要删除的cookie的路径设置成与磁盘上存储的cookie的路径一致(即两个cookie的setPath一致)

     

    2)设置cookie的携带的路径

    cookie在默认情况下 会在产生的cookie资源的所在的目录下都携带

    http://localhost/testweb_fr/accessTime

    访问http://localhost/testweb_fr/下的所有的资源都携带

     

    http://localhost/testweb_fr/abc/accessTime

    访问http://localhost/testweb_fr/abc下的所有的资源都携带

     

    cookie.setPath(携带cookie的路径);

    设置cookie的携带路径时以/开头,/代表本web服务器

     

    例如:

    cookie.setPath(“/”), cookie在访问web服务器下的所有资源的都携带

    cookie.setPath(“/testweb_fr”),在testweb_fr应用时携带cookie

    cookie.setPath(“/testweb_fr/abc”),访问这个testweb_fr应用下的 abc目录下的资源时才携带cookie

    cookie.setPath(“/testweb_fr/abc/accessTime”),只有访问accessTime 才携带cookie

     

    3)设置三方cookie(了解)

    cookie.setDomain(域名);

    三方cookie具有进攻性

     

     

    5.以上代码实现

    response.setContentType("text/html;charset=UTF-8");
    
    //1、创建时间的Cookie
    
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    
    String accessTime = format.format(new Date());
    
    Cookie cookie = new Cookie("accessTime",accessTime);
    
    //1.1 设置cookie的持久化的时间----在磁盘上存储的时间
    
    //cookie.setMaxAge(60*10);
    
    //1.2 设置cookie的携带路径  /代表web应用
    
    cookie.setPath("/testweb_fr/abc/accessTime");
    
    //2、将cookie写给客户端
    
    response.addCookie(cookie);
    
    //3、获取客户端携带的时间的cookie
    
    String accessTime_client = null;
    
    Cookie[] cookies = request.getCookies();
    
    if(cookies!=null){
    
    for(Cookie coo:cookies){
    
    //取出美哟个cookie对象的名字
    
    String cookieName = coo.getName();
    
    if("accessTime".equals(cookieName)){
    
    //取出该cookie的值
    
    accessTime_client = cookie.getValue();
    
    }
    
    }
    
    }
    
     
    
    //4、为用户显示上次访问时间
    
    if(accessTime_client!=null){
    
    response.getWriter().write("您的上一次访问时间是: "+accessTime_client);
    
    }else{
    
    //第一次访问
    
    response.getWriter().write("您是第一次访问");
    
    }

     

     

     

     

     

     

     

     

    二、会话技术之Session

    1.怎样去创建session/获得session

    HttpSession session = request.getSession();

    上述方法的内部原理:

    当request在调用getSession方法时,内部会去查看一下该用户是否在web应用的内部存在一块内存区域,如果有直接返回这个内存区域的地址,如果没有就创建一个新的session区域

    服务器端通过什么判断用户是否已经存在session的呢?

    根据session的编号id--->JSESSIONID

    2.session的生命周期

    创建:第一次调用request.getSession()

    销毁:

    1)服务器关闭 session销毁

    2)session超时 默认30分钟

    计算点从何时开始:最后一次操作该站点后的30分钟

    3)手动销毁session

    session.invalidate();

     

    3.Session是一个域对象

     
       

    Session是借助于Cookie的,同一个Session的标志就是JSESSIONID相同。

    如果将浏览器关闭,在打开访问资源,会重新创建session

     

    怎样将session持久化----->存储JSESSIONID的Cookie持久化

    抓包工具获得:(抓包工具我用的是httpwatch)

    Set-Cookie: JSESSIONID=6232D4782FC69B1D780261E93DFA5FBB; Path=/testweb_fr/;

    手动创建一个Cookie 在上面的cookie的基础上 多一个max-age


    如果客户端禁用Cookie,客户端不能在存储Cookie,JSESSIONID丢失,解决?

    解决方案:URL重写,在每个url地址后都使用分号;拼接JSESSIONID

    response.ecodeURL()

    response.ecodeRedirectURL()

     

    http://localhost/testweb_fr/index.jsp;jsessionid=377B2F0501FF9FE643D7D88F4E883FFD

  • 相关阅读:
    快速排序算法
    DirectX9(翻译):介绍
    奇葩的面试题
    新博客
    OpenCV2:幼儿园篇 第八章 视频操作
    编程规范:位运算
    编程规范:allocator
    深浅copy和浅copy
    模块和包
    递归函数
  • 原文地址:https://www.cnblogs.com/fengru/p/5463562.html
Copyright © 2020-2023  润新知