zoukankan      html  css  js  c++  java
  • 会话追踪技术

    3.会话追踪技术:cookie
        3.1 http协议的访问是无状态的访问
            当前访问是不会知道之前访问的状态的.(http协议的访问是不会帮我们保存访问的记录/痕迹的)。
        
        3.2 有些时候需要记录之前的访问状态
            比如在购物网站的时候,第一次访问点击购买了一个手机,第二次访问点击购买了一个电脑,第三次访问点击购物车结算,这个时候我们就必须知道前俩次访问的时候购买了什么,要不然就没有方法去结算。
            所以我们就有了会话追踪技术来解决这个访问无状态的问题
        
        3.3 session和cookie的位置
            session是保存在服务器端的一个对象.客户端是没有session的.
            cookie在客户端和服务器端都会有。但是存在的形式不一样.在客户端cookie是以本地文件(浏览器管理的文件)的形式存在的,在服务器端是以java对象的形式存在.我们平时说说的cookie都是指的客户端文件形式存在的cookie
        
        3.4 session和cookie的作用
            session是在服务器端保存用户的相关信息,cookie是在客户端保存用户的相关信息。同时cookie还可以在客户端保存session的信息,例如session的id值
        
        3.5 session和cookie之间的关系
            1.客户端访问服务器的时候,假设服务器创建了一个session对象,服务器端的内存里面同时可能有好多个session对象,分别对应着不同客户端的访问,每一个session对象都有一个唯一的id值,叫做JSESSIONID。

            2.服务器端给客户端产生一个session对象后,会通过这次访问的response对象把这个session的JSESSIONID的值返回给浏览器,浏览器接收到后会把这个值以一个cookie文件的形式保存起来.

            3.在此之后,这个浏览器再发请求到服务器的时候,就会把之前保存在cookie文件中的JSESSIONID的值传给服务器,服务器通过这个JESSIONID的值就能够知道服务器内存中是哪一个session对象和当前这个客户端对应.
            
            4.这样以来,就能到达一个效果,客户端的每一次访问,在服务器端都能够拿到相同的一个session对象,从而实现不同请求之间通过相同的session对象进行数据的共享.

        3.6 服务器端向浏览器写回cookie
            response对象会把cookie带回到浏览器,然后浏览器把cookie对象中的内容保存到对应的一个cookie的文件中。

            //创建cookie对象
            Cookie c1 = new Cookie("name","tom");
            Cookie c2 = new Cookie("msg","hello");
            //设置cookie的有效时间
            c1.setMaxAge(60*60*24*365);
            c2.setMaxAge(60*60*24*365*10);
            //把cookie放到response里面
            response.addCookie(c1);
            response.addCookie(c2);

            注意:如果没有设置cookie生效的时间,那么这个cookie就是会话cookie,当关闭浏览器的时候cookie就是失效了。

        3.7 servlet中拿到从浏览器发送过来的cookie文件中的数据
            //从request中拿到一个cookie数组
            //如果没任何cookie数据则返回null
            Cookie[] cookies = request.getCookies();
            //遍历数组 拿出key和value
            for(Cookie c:cookies){
                String key = c.getName();
                String value = c.getValue();
                System.out.println(key+" : "+value);
            }


    4.URL重写 (也属于会话追踪技术的一种)
        4.1 URL重写的作用
            当前浏览器把cookie禁用之后,浏览器在发请求的时候,就不会把cookie带到服务器端了(其中最重要的也包括JSESSIONID),因为禁用cookie之后浏览器拒绝一切站点向浏览器写入cookie的(注意在禁用之前是否已经有一些已经存在的cookie了),这样的话,浏览器发送请求的时候就不能在服务器端根据JSESSIONID来拿到之前创建的session对象了(因为发送请求的时候没有把JSESSIONID的值传给服务器)。URL重写就是解决这个问题的
        
        4.2 JSESSIONID从客户端传给服务器的方式
            第一种方式:
                JSESSIONID保存在cookie文件中,浏览器发送请求的时候把这个cookie文件中的数据带给服务器.
            第二种方式:
                通过传参的方式,把JSESSIONID的值通过要访问的URL传给服务器.(URL重写)
        
        4.3 URL重写的实现
            String url = response.encodeURL("url");
            这个方法参数就是我们要访问的URL,这个方法会把重写后的URL以字符串的形式返回.

            例如:在一个超链接中,本来要访问的URL是:
                    <a href="TestServlet">
            重写后:
            <a href="TestServlet;jsessionid=5480EF9016295A73DC56731A2F123246">
            
            注意:response.encodeURL("url")方法
            如果当前没有使用到session,则直接返回参数url。
            同时还要注意禁用cookie后是不是已经把之前的cookie给删除了

     

  • 相关阅读:
    打造自己的性能测试类
    网站配置之最佳实践
    C#控制台窗口居中显示(转)
    将PDM文件导出成CHM帮助文件
    分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限
    Oracle 给已创建的表增加自增长列
    托管调试助手“NonComVisibleBaseClass”检测到问题
    翻页效果
    Excel表格转Json数据结构
    关于2D渲染的一些小想法
  • 原文地址:https://www.cnblogs.com/yxj808/p/12018685.html
Copyright © 2011-2022 走看看