• session学习


    四大作用域

    作用域通信对象有效范围
    page pageContext 当前页面有效
    request request 一次请求周期:从http请求发起,到服务器处理结束,返回响应的整个过程(转发)
    session session 一个会话周期:从用户打开浏览器访问服务器开始,到用户关闭浏览器的整过程,可以有多个request
    application application 从启动应用到关闭应用的整个过程,可以有多个session
    • 都有的方法
      • void setAttribute(String name, Object Value);
      • Object getAttribute(String name);
      • void removeAttribute(String name);
      • void removeValue(String value);

    session对象

    • 什么是session
      • 1.session表示客户端与服务器的一次会话
      • 2.session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间
      • 3.从上面可以看出,session实际上是一个特定的时间概念
      • 4.在服务器中保存着不同用户的不同session,一个用户就对应一个session
    • session对象
      • 1.session对象是一个JSP内置对象
      • 2.session对象在第一个JSP页面被装载时自动创建
      • 3.当一个客户访问一个服务器,可能需要在几个页面之间切换,服务器应当通过某种方法知道这是同一个用户,这就需要session对象
      • 4.session对象是HttpSession类的实例
      • 5.session对象可以通过request.getSession()获得
    • session常用方法
      • 1.Long getCreationTime() 返回session创建时间
      • 2.String getId() 返回session创建时JSP引擎为他设置的唯一的ID号
      • 3.Object setAttribute(String name, Object value) 给session对象绑定属性
      • 4.Object getAttribute(String name) 获得属性,如果没有name,则返回null
      • 5.String[] getValueNames() 返回一个包含此session中所有可用属性的数组
      • 6.int getMaxInactiveInterval() 返回会话超时时间(单位秒)
      • 7.void setMaxInactiveInterval(int time) 设置会话超时时间
      <%
      	SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日:HH-mm-ss");
      	Date date = new Date(session.getCreationTime());
      	session.setAttribute("username", "jack");
      	session.setAttribute("password", "123");
      	session.setAttribute("age", 20);
      %>
      session创建时间:<%= session.getCreationTime() %>  就是: <%= sdf.format(date) %><br>
      session的ID<%= session.getId() %><br>
      session取得属性username----<%= session.getAttribute("user") %><br>
      session中的所有属性:<br>
      	<%
      		String[] attrs = session.getValueNames();
      		if (attrs != null) {
      			for (int i = 0; i < attrs.length; i++) {
      				out.print("&nbsp;&nbsp;&nbsp;&nbsp;"+attrs[i]+":"+session.getAttribute(attrs[i])+"<br>");
      			}
      		}
      	%>
      session默认的超时时间:<%= session.getMaxInactiveInterval() %><br>
      <% session.setMaxInactiveInterval(5); %>
      session自己设置的超时时间:<%= session.getMaxInactiveInterval() %><br>
      
      • 8.Enumration<String> getAttributeNames()取代了过时的getValueNames()方法
      Enumeration<String> arr = session.getAttributeNames();
      while (arr.hasMoreElements()) {
      	String string = (String) arr.nextElement();
      	System.out.println(session.getAttribute(string));
      }
      
    • session的生命周期

      • 1.创建:第一次访问jsp或者servlet时,如果访问的是jsp,那么就会创建session,如果访问的是servlet,那么就要看你是否需要session,也就是调用了getSession()方法。每次客户端向服务器发送请求时,都会将此seesionId携带过去,服务端会对此sessionId进行校验
      • 2.活动:
        • 会话中通过超链接打开的新页面属于同一次会话
        • 只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话
        • 除非本次会话的所有页面都关闭再重新访问某个JSP或者Servlet将会创建新的会话
        • 特别注意:原有会话还存在,这个旧的sessionId仍然存在于服务端,只不过再也没有客户端会携带它然后交予服务端校验

      • 3.销毁
        • 调用session.invalidate();方法(注销功能)
        • 会话超时,如果设置成负数或者0,会话将永不超时有3种方式设置会话超时时间,权限1>2>3
          • 1.ssession.setMaxInactiveInterval(5);单位是秒
          • 2.web.xml里面配置,单位是分
          <session-config>
              <session-timeout>1</session-timeout>
          </session-config>
          
          
          • 3.在tomcat中的web.xml中配置,单位是分
          <session-config>
              <session-timeout>30</session-timeout>
          </session-config>
          
        • 服务器关闭(皮之不存,毛将焉附?)

    session与cookie

    • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
    • 理论上,一个用户的所有请求操作都应该属于同一个会话,HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。那怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理
    • 查看某个网站颁发的Cookie很简单。在浏览器地址栏输入javascript:alert (document. cookie)就可以了
    • Cookie具有不可跨域名性
    • cookie常见属性
    属性名描述
    String name 该Cookie的名称。Cookie一旦创建,名称便不可更改
    Object value 该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码
    int maxAge 该Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1
    • session的使用要依赖于cookie,如果浏览器不支持cookie或者cookie被禁用了该怎么办呢? 这就要用到URL重写了。
    • URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。
    • HttpServletResponse类提供了encodeURL(Stringurl)实现URL地址重写
    response.encodeURL("index.jsp");
  • 相关阅读:
    Go 协程(绿程/轻量级线程 用户态)--没有历史包袱
    Go 语言编码规范
    hexo 问题解决
    vue3中的watchEffect的参数
    开机提示0xc0000428无法验证此文件的数字签名的解决方法
    实现用户名的更换登陆
    element 新组件
    Object 常用方法
    Odoo中登录接口返回的session_id失效
    详细解析DLL构建CLR版本冲突问题
  • 原文地址:https://www.cnblogs.com/qiuqiutang/p/9812172.html
Copyright © 2020-2023  润新知