cookie、session

Cookie与Session简述

1    会话

    程序中会话可以简单理解为:用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一次会             话。

    比如:输入网址进入优酷,然后我在这优酷这个网站里的所有跳转。访问的时候,这个会话就已经开始……关闭浏览器的时候,这个会话就结束……

2 会话跟踪

    HTTP是无状态协议,没有记忆力,不知道哪一个客户端请求了自己,每个请求之间无法共享数据。这就无法知道会话什么时候开始,什么时候结束,也无法确定发出请求的用            户身份。

    在一次会话中多次请求共享数据即会话跟踪技术

3   Cookie

    cookie是一种会话跟踪技术,Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/valu e保存到某个目录下的文本文件内,下次            请求同一网站时就发送该Cookie给服务器。Cookie是属于浏览器端的技术。自动地在Web服务器和浏览器之间来回传递的一小块信息,适用于那些需要跨越许多页面的信            息。

  Cookie的原理:把共享数据存储在浏览器中.每次请求,再把共享数据带到服务端.

  cookie的创建:

      //创建一个Cookie

        Cookie nameCookie = new Cookie("name", "zhaoyi");

      //将Cookie还给浏览器

       response.addCookie(nameCookie);

  得到cookie:

      

复制代码
1.    String name = "";

2.    //得到所有Cookie

3.    Cookie[] cookies = request.getCookies();

4.    //循环拿每一个Cookie

5.    if(cookies != null){

6.    for (Cookie cookie : cookies) {

7.    //如果cookie的名称等于name,则是我们想要的那一个

8.    if("name".equals(cookie.getName())){

9.    name = cookie.getValue();

10.    }
复制代码

  因为cookie不支持中文,所以应该在创建cookie对象之前将编了码的字段放进去

        //创建之前先编码

        name = URLEncoder.encode(name,"utf-8");

        //创建一个Cookie

        Cookie nameCookie = new Cookie("name", "zhaoyi");

  然后在得到cookie的值之前解码

        if("name".equals(cookie.getName())){

          //得到之前进行解码

          name = URLDecoder.decode(name,"utf-8");

          name = cookie.getValue();

        }

  如果需要修改cookie指定名的value值,则可以按照下面两种方式

     方式1: 根据name获取被修改的Cookie对象,在调用setValue方法即可.

      方式2: 重新创建一个同名的Cookie.

  但是需要注意的是,修改cookie的值之后,需要将修改过后的cookie交给浏览器

      response.addCookie(nameCookie);

  

  在看看cookie的生命周期  

    关闭浏览器之后cookie就消失了,就是说这个时候cookie保存的数据就没有了

    但是,通常情况下,都可以通过cookie对象的setMaxAge(int  seconds);方法来设置cookie的存活时间

      seconds>0:可以存活多少秒.

      seconds<0:存放在浏览器进程中,闭浏览器Cookie就丢失了.

      seconds=0:删除Cookie.    删除cookie之后也需要调用response.addCookie(nameCookie);

  cookie的缺点:

      处理中文麻烦

       不安全

      一个Cookie只能存储简单的类型   Cookie的value只能是字符串,不能是对象

      。。。。所以,可以使用Session

4 Session

    session与cookie一样,也是一红会话跟踪技术,被称为会话控制,在所有的session追踪技术中,Httpsession对象是最强大、功能最多的。HttpSession对象是放到                 服务器内存中的,因此数量尽量不要太多,session也是通过cookie来实现的

  session得实现

    服务器创建Session--》将所有数据放到Session中--》发一个key给客户端--》客户端拿着key到服务器中找到自己保存的数据

                这里的key就是一个cookie,名称是jsessionid

      sesssion就想一个map

    获取与创建session

                        session是由服务器创建的,可以在请求对象中获得

        //等同于getSession(true);

         HttpSession  session = request对象.getSession();

        //如果当前有Session对象,就直接返回,若没有,则先创建一个再返回.

         HttpSession  session = request对象.getSession(true);

        //如果当前有Session对象,就直接返回,若没有,则返回null.

         HttpSession  session = request对象.getSession(fals);

    sesssion添加、修改、删除

         添加

        session对象.setAttribute(String name, Object value);

        session.setAttribute("name",name);

        删除

        删除一个值:session对象·removeAttribute(String name);

        删除所有值:session对象·invalidate();

        修改就是添加方法,相当一重新设置一次值

 

   session的一些设置

        session.setMaxInactionveInterval(15);

        这里表示上一次操作后,15秒内不再和该网页交互的话,则session就会自动摧毁,里面数据回销毁

        就是说两次操作间隔不能草果15秒

    一般,不用去设置这个,因为在tomcat中默认的超时时间是30分钟。

            <session-config>

                <!-- 间隔40分钟 -->

               <session-timeout>40</session-timeout>

            </session-config>

       但是这里需要注意:只要浏览器关闭,session就一定会消失。

posted on 2017-04-26 16:47  蓝枫丿  阅读(76)  评论(2)    收藏  举报

导航