• session


    session技术

      4.1 引入

        cookie的局限:

          1.cookie只能存字符串类型,不呢个保存对象

          2.只能存非中文

          3.一个cookie的容量不能超过4kb

        如果要保存非字符串,超过4kb的技术,只能使用session技术

        session特点:

          会话数据保存在服务器端(内存中)

      4.2 session技术的核心

        HttpSession类:用于保存会话数据

        1.创建或者得到session对象

          HttpSession getSession();

          Httpsession getSession(boolean create)

        2.设置session对象

          setMaxInactiveInterval(int interval):设置session的有效时间

          invalidate():销毁session对象

          getId():得到session的编号

        3.保存会话数据到session对象中

          setAttribute():保存数据(域对象有的方法)

          getAttribute():  获取数据

          removeAttribute():  清除数据

      4.3 session原理

        问题:服务器可以识别不同的浏览者

        现象:

          浏览器1:1.创建session对象,保存会话数据

        

     1 package com.java.session;
     2 
     3 import java.io.IOException;
     4 import javax.servlet.ServletException;
     5 import javax.servlet.http.HttpServlet;
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 import javax.servlet.http.HttpSession;
     9 /**
    10  * 保存数据到session域对象
    11  * @author syousetu
    12  *
    13  */
    14 public class SessionDemo extends HttpServlet {
    15 
    16     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    17         //1.创建session对象
    18         HttpSession session = request.getSession();
    19         //2.保存数据
    20         session.setAttribute("name", "rose");
    21     
    22         response.sendRedirect(request.getContextPath()+"/SessionDemo2");
    23     }
    24 
    25 
    26 }

        浏览器1:2.得到session中的对象

        

     1 package com.java.session;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.ServletException;
     6 import javax.servlet.http.HttpServlet;
     7 import javax.servlet.http.HttpServletRequest;
     8 import javax.servlet.http.HttpServletResponse;
     9 import javax.servlet.http.HttpSession;
    10 
    11 /**
    12  * 从session域对象中取出数据
    13  * 
    14  * @author syousetu
    15  *
    16  */
    17 public class SessionDemo2 extends HttpServlet {
    18     protected void doGet(HttpServletRequest request, HttpServletResponse response)
    19             throws ServletException, IOException {
    20 
    21         // 1.得到session对象
    22         HttpSession session = request.getSession();
    23         String value = (String) session.getAttribute("name");
    24         System.out.println(value);
    25         
    26     }
    27 
    28 }

        新的浏览器1:

          2.得到session中的数据:

            拿不到数据

        新的浏览器2:

          2.得到session中的数据

             拿不到数据

      取到数据的前提:在哪个域对象保存数据,就必须从哪个域对象取出

      得到了一个session,就给session分配了一个标记

    请求头和响应头中所带的信息

    代码解读:HttpSession session  = request.getSession();

      1.创建一个session对象,给session对象分配一个唯一的id,叫JSESSIONID

        new HttpSession()

      2.将ISESSIONID作为cookie的值发送给浏览器保存

        Cookie cookie = new Cookie("JSESSIONID",sessionID)

        response.addCookie(cookie)

      3.第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器

      4.服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象

        if((map.get(sessionID))){

          return map.get(sessionID)

        }

      5.如果找到对应编号的session对象,直接返回该对象

      6.如果找不到对应编号的session对象,创建新的session对象,继续走1的流程

     结论:通过JSESSION的cookie值在服务器找session对象

     4.4:session细节

      1. getID():得到session的编号

      2. 两个getsession的方法

        getSession(true)/getSession():创建或得到session对象。没有匹配的session编号,自动创建新的session对象

        getsession(false):只是得到session对象,如果没有匹配的,直接返回null

      3. setMaxinactiveInterva(int interval):设置session的有效时间  秒数

        (关闭浏览器,session还在)

        session对象销毁时间:

          1.默认情况下:30分钟服务器自动回收

          2.可以在web.xml中修改session的全局有效时间,按分钟计算,最小1分钟

            <session-config>

              <session-timeout>1</session-timeout>

            </sesison-config>

          3.修改session回收时间

          4.手动销毁session对象

            invalidate()  :手动销毁session对象

          (关掉浏览器后拿不到session,是因为session还在,但是浏览器中的标记没了,证明标记session的cookie是存放在浏览器内存中的 如想关掉浏览器仍然可以拿到session,则需要修改session的MaxAge,设为正数,保存在硬盘中)

    总结:

      1.会话管理:浏览器和服务器会话过程中产生的会话数据的管理

      2.Cookie技术:

        new Cookie("name","value")

         response.addCookie(cookie)

        request.getCookies();

       3.Session技术

        request.getSession()

        setAttribute("name",会话数据)

        getAttribute("会话数据")

  • 相关阅读:
    SVN使用教程总结
    学习duilib库过程中的笔记
    duilib库使用(一)-- 编译生成依赖库
    在Windows服务进程中启动需管理员权限(带盾牌图标)的应用程序
    如何在Windows服务程序中读写HKEY_CURRENT_USER注册表
    vs2015 编译boost库
    NSIS 打包工具使用
    C 读文件
    常用的字符转化的方法
    C# 中对于json的解析小结
  • 原文地址:https://www.cnblogs.com/syousetu/p/6547013.html
Copyright © 2020-2023  润新知