zoukankan      html  css  js  c++  java
  • Session January 27,2020

    ## Session:主菜


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


    二、快速入门:
      1. 获取HttpSession对象:
        HttpSession session = request.getSession();
      2. 使用HttpSession对象:
        Object getAttribute(String name)
        void setAttribute(String name, Object value)
        void removeAttribute(String name)


    三、 原理
      * Session的实现是依赖于Cookie的。


    四、细节:
      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对象即可。

      3. session什么时候被销毁?
        1. 服务器关闭
        2. session对象调用invalidate() 。
        3. session默认失效时间 30分钟
          选择性配置修改
          <session-config>
          <session-timeout>30</session-timeout>
          </session-config>

    五、session的特点
      1. session用于存储一次会话的多次请求的数据,存在服务器端
      2. session可以存储任意类型,任意大小的数据

      * session与Cookie的区别:
        1. session存储数据在服务器端,Cookie在客户端
        2. session没有数据大小限制,Cookie有
        3. session数据安全,Cookie相对于不安全

    request

    request范围较小一些,只是一个请求。

    request对象的生命周期是针对一个客户端(说确切点就是一个浏览器应用程序)的一次请求,当请求完毕之后,request里边的内容也将被释放点 。

    简单说就是你在页面上的一个操作,request.getParameter()就是从上一个页面中的url、form中获取参数。

    但如果一个request涉及多个类,后面还要取参数,可以用request.setAttribute()和request.getAttribute()。

    但是当结果输出之后,request就结束了。

    session

    session可以跨越很多页面。

    而session的生命周期也是针对一个客户端,但是却是在别人设置的会话周期内(一般是20-30分钟),session里边的内容将一直存在,即便关闭了这个客户端浏览器 session也不一定会马上释放掉的。

    可以理解是客户端同一个IE窗口发出的多个请求。

    这之间都可以传递参数,比如很多网站的用户登录都用到了。

    比较

    request占用资源比较少,安全性也比较高,可是相对来说缺乏持续性。

    session则相对来说对资源的消耗会大点,安全性相对来说也会稍微低点,可是它能实现比如会话跟踪技术。

    如果可以使用request的情况下,尽量使用request 因为相对于服务器来说资源的消耗还是比较重要的。


    在传递页面过程中request传递到下一页面就不能再传递了,而sesison却不如此,即request仅限于2个相邻的页面

    每按一个网页上的一个链接就是一个新的request,当服务器返回给浏览器一个response时,request就结束了,此时保存在request中的对象就不存在了,

    但是当你用一个浏器连到服务器上时application-server会新开一个session给你,当连接超时或浏览器关闭时session才销毁。

    所以说作用的范围是不一样,session也就可以跟踪用户的状态。


    session相当于是一个客户端的全局变量,

    比如A机与服务器第一次访问时设置session.setAttribute("aaa")="ComputerA".则在A机访问继续访问的任意一个页面都可以取的session.getAttribute("aaa")的值是ComputerA;  
       
    request是某一次访问的局域变量,

    生命周期只是一次请求。因此login的变量应该放在session中

  • 相关阅读:
    虚拟化资料
    Windows线程+进程通信
    Linux进程+进程间通信IPC
    COM/DOM/COM+
    C# 2.0新特性与C# 3.5新特性[转]
    [CruiseControl]配置文件config.xml
    C#的Delegate和Event
    [BuildRelease Management]Visual Build
    软件培训机构
    可以自动输入密码的Runas
  • 原文地址:https://www.cnblogs.com/yyanghang/p/12236116.html
Copyright © 2011-2022 走看看