首页 > 其他 > 详细

session学习

时间:2018-10-18 18:40:21      阅读:166      评论:0      收藏:0      [点我收藏+]

四大作用域

作用域通信对象有效范围
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");

session学习

原文:https://www.cnblogs.com/qiuqiutang/p/9812172.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!