Cookie&Session

一.会话技术

1) 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据的。

2)会话技术分为Cookie和Session:

 Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除cookie;

 Session:将数据存储到服务器端,安全性相对好,增加服务器的压力;

二、Cookie技术

1.服务器端向客户端发送一个Cookie

1)创建Cookie:

Cookie cookie = new Cookie(String cookieName,String cookieValue);

 

注意: * 在tomcat 8 之前 cookie中不能直接存储中文数据。但在tomcat 8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储。

2)设置Cookie在客户端的持久化时间:

cookie.setMaxAge(int seconds); ---时间秒

注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件里

 

3)设置Cookie的携带路径:

cookie.setPath(String path);

注意:如果不设置携带路径,那么该cookie信息会在访问产生该cookie的 web资源所在的路径都携带cookie信息

 

 

4)向客户端发送cookie:

response.addCookie(Cookie cookie);

 

5)删除客户端的cookie:

如果想删除客户端的已经存储的cookie信息,那么就使用同名同路径的持久化时间为0的cookie进行覆盖即可;

 

2.服务器端怎么接受客户端携带的Cookie 

1)通过request获得所有的Cookie:

Cookie[] cookies = request.getCookies();

2)遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie

for(Cookie cookie : cookies){

if(cookie.getName().equal(cookieName)){

String cookieValue = cookie.getValue();

}

}

 3. cookie共享问题?

    1. 假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?

           * 默认情况下cookie不能共享

            * setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录;如果要共享,则可以将path设置为"/"

     2. 不同的tomcat服务器间cookie共享问题?

          * setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享

           * setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享

4.Cookie的特点和作用

      1. cookie存储数据在客户端浏览器

       2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)

        

      * 作用:

                   1. cookie一般用于存出少量的不太敏感的数据

                    2. 在不登录的情况下,完成服务器对客户端的身份识别

 创建Cookie:

复制代码
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.创建cookie对象
        Cookie cookie =new Cookie("name", "zhangsna");
        
        //为cookie设置持久化时间----------cookie在硬盘上保存的时间
        cookie.setMaxAge(60*10);//10分钟
        
        //为cookie设置携带路径
        cookie.setPath("/WEB5/sendCookie");//只有访问sendCookie资源时才携带这个cookie
        //2.将cookie中存储的信息发送给客户端---通过头
        response.addCookie(cookie);
    }
复制代码

获得Cookie:

复制代码
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获得客户端携带的cookie数据
        Cookie[] cookies = request.getCookies();
        //通过cookie名称获得cookie
        if(cookies!=null) {
            for(Cookie cookie:cookies) 
            {
                //获得cookie的名称
                String cookiename = cookie.getName();
                if(cookiename.equals("name")) 
                {
                    
                    String cookieValue = cookie.getValue();
                    System.out.println(cookieValue);
                }
            }
        }
        
    }
复制代码

删除Cookie:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //删除客户端保存的cookie信息
        Cookie cookie = new Cookie("name","");
        //设置携带路径,与要删除的cookie路径一致
        cookie.setPath("/WEB5/sendCookie");
        //时间设置为0,代表删除cookie
        cookie.setMaxAge(0);
    }

 

三、Session技术


概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession

 

1.获得Session对象

HttpSession session = request.getSession();

   * request.getSession()方法内部会判断,该客户端是否在服务器端已经存在session;
   * 如果客户端在此服务器不存在session,那么就会创建一个session对象;
   * 如果客户端在此服务器存在session,获取已经存在的该session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在 session了);

2.怎样向session中存取数据(session也是一个域对象)

Session也是存储数据的区域对象,所以session对象也具有如下三个方法:

session.setAttribute(String name,Object obj);

session.getAttribute(String name);

session.removeAttribute(String name);

  原理: Session的实现是依赖于Cookie的。

3.Session对象的生命周期

创建:第一次执行request.getSession()时创建

销毁:

1)服务器(非正常)关闭时

2)session过期/失效(默认30分钟)

 

问题:时间的起算点 从何时开始计算30分钟?

从不操作服务器端的资源开始计时

 

可以在工程的web.xml中进行配置

<session-config>

        <session-timeout>30</session-timeout>

</session-config>

3)手动销毁session

session.invalidate();

作用范围:

默认在一次会话中,也就是说在一次会话中任何资源公用一个session对象

4.细节:

      1) 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?

          * 默认情况下。不是。

           * 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。          

 Cookie c = new Cookie("JSESSIONID",session.getId());
             c.setMaxAge(60*60);
             response.addCookie(c);

       2. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?

          * 不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作

            * session的钝化:在服务器正常关闭之前,将session对象系列化到硬盘上

            * session的活化:在服务器启动后,将session文件转化为内存中的session对象即可。

 

posted @   撑起一片阳光  阅读(227)  评论(0编辑  收藏  举报
努力加载评论中...
  1. 1 把孤独当做晚餐(翻自 群星) 井胧
  2. 2 教海鸥飞行的猫 王心凌
  3. 3 室内系的TrackMaker(YUNOMI)(翻自 nicamoq) Hanser
  4. 4 祝你爱我到天荒地老 颜人中 / VaVa毛衍七
  5. 5 我不是你的宋冬野 林啟得
  6. 6 父亲写的散文诗 刘乐瑶
  7. 7 山楂树之恋 程佳佳
  8. 8 summertime cinnamons / evening cinema
  9. 9 神武醉相思(翻自 优我女团) 双笙(陈元汐)
  10. 10 空山新雨后 音阙诗听 / 锦零
  11. 11 Wonderful U (Demo Version) AGA
  12. 12 广寒宫 丸子呦
  13. 13 陪我看日出 回音哥
  14. 14 春夏秋冬的你 王宇良
  15. 15 世界が終わるまでは… WANDS
  16. 16 多想在平庸的生活拥抱你 隔壁老樊
  17. 17 千禧 徐秉龙
  18. 18 我的一个道姑朋友 双笙(陈元汐)
  19. 19 大鱼 (Cover 周深) 双笙(陈元汐)
  20. 20 霜雪千年 双笙(陈元汐) / 封茗囧菌
  21. 21 云烟成雨(翻自 房东的猫) 周玥
  22. 22 情深深雨濛濛 杨胖雨
  23. 23 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  24. 24 斑马斑马 房东的猫
  25. 25 See You Again Wiz Khalifa / Charlie Puth
  26. 26 Faded Alan Walker
  27. 27 Natural J.Fla
  28. 28 New Soul Vox Angeli
  29. 29 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  30. 30 像鱼 王贰浪
  31. 31 Bye Bye Bye Lovestoned
  32. 32 Blame You 眠 / Lopu$
  33. 33 Believer J.Fla
  34. 34 书信 戴羽彤
  35. 35 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  36. 36 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  37. 37 慢慢喜欢你 LIve版 戴羽彤
  38. 38 病变 戴羽彤
  39. 39 那女孩对我说 (完整版) Uu
  40. 40 绿色 陈雪凝
Five Hundred Miles - Justin Timberlake / Carey Mulligan / Stark Sands
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : Hedy West

作曲 : Hedy West

If you missed the train I'm on, (若你错过了我搭乘的那班列车)

You will know that I am gone, (你应明白我已离开)

You can hear the whistle blow a hundred miles. (你听那绵延百里的汽笛)

A hundred miles, a hundred miles, (一百英里又一百英里 载我远去)

A hundred miles, A hundred miles, (一百英里又一百英里 再回不去)

You can hear the whistle blow A hundred miles. (那绵延百里的汽笛会告诉你我离去的讯息)

Lord, I'm one, Lord, I'm two, Lord, (上帝啊,一百英里 两百英里 渐渐远去)

I'm three, Lord, I'm four, Lord, (三百英里 上帝啊,四百英里 再回不去)

I'm five hundred miles away from home. (不知不觉我便已离家五百英里)

Away from home, away from home, (背负一切 离乡背井)

away from home, away from home, (家在远方 我却再难回去)

Lord, I'm five hundred miles away from home (上帝啊 家乡离我已有五百英里)

Not a shirt on my back, (如今我衣衫褴褛)

Not a penny to my name. (依旧是一文不名)

Lord. I can't go back home this a-way. (上帝啊 我怎能就这样回到家去)

This a-way, this a-way, (这般潦倒 这般困顿)

This a-way, this a-way, (这般处境 惨惨戚戚)

Lord, I can't go back home this a-way. (这样的我又怎好意思回到家去)

If you missed the train I'm on, (若那列车开动让我来不及见你)

You will know that I am gone, (那就说明我已独自黯然离去)

You can hear the whistle blow A hundred miles. (你听那绵延百里的汽笛)

A hundred miles. (一百英里)

A hundred miles. (又一百英里 载我远去)

A hundred miles. (一百英里)

A hundred miles. (又一百英里 再回不去)

You can hear the whistle blow a hundred miles (你听那绵延百里的汽笛 声渐远去)

You can hear the whistle blow a hundred miles (告诉着你我已离乡背井 不见归期)

You can hear the whistle blow a hundred miles (那绵延百里的汽笛 一如我的叹息)

点击右上角即可分享
微信分享提示