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");

猜你喜欢

转载自www.cnblogs.com/qiuqiutang/p/9812172.html