HttpSession(JAVA)学习

1.Session简单介绍

 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

在这里基于Java Servlet理解Session的概念与原理,在Java中,HTTP的Session对象用javax.servlet.http.HttpSession来表示。

2.Session和Cookie的区别

  • Cookie是把用户的数据写给用户的浏览器
  • Session是把用户数据写到用户独占的Session中
  • Session对象由服务器创建,开发人员可以调用request对象的GetSession方法得到session对象

3.Session实现原理

  服务器是如何实现一个session为一个用户浏览器服务的?

第一次访问时,服务器会创建一个新的sesion,并且把session的Id以cookie的形式发送给客户端浏览器。服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。

 4.Session对象的创建与销毁

4.1Session对象的创建

//范例:创建session

 //使用request对象的getSession()获取session,如果session不存在则创建一个
 HttpSession session = request.getSession(); 
 //获取session的Id
 String sessionId = session.getId();  
 //判断session是不是新创建的
 if (session.isNew()) {  
     response.getWriter().print("session创建成功,session的id是:"+sessionId);  
 }else {  
     response.getWriter().print("服务器已经存在session,session的id是:"+sessionId); 
 }

4.2 Session对象的销毁

1)Session超时:超时指的是连续一定时间服务器没有收到该Session所对应客户端的请求,并且这个时间超过了服务器设置的Session超时的最大时间。
2)程序调用HttpSession.invalidate()
3)服务器关闭或服务停止

session会因为浏览器的关闭而删除吗?
不会,session只会通过上面提到的方式去关闭。

下面为方法1,2:

session对象默认30分钟没有使用,则服务器会自动销毁session,在web.xml文件中可以手工配置session的失效时间,

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <!-- 设置Session的有效时间:以分钟为单位-->
    <session-config>
        <session-timeout>15</session-timeout>
    </session-config>

</web-app>

当需要在程序中手动设置Session失效时,可以手工调用session.invalidate方法,摧毁session。

 HttpSession session = request.getSession();
 //手工调用session.invalidate方法,摧毁session
 session.invalidate();

5.Session位置

服务器端的内存中(服务器崩掉所有session就没了)。不过session可以通过特殊的方式做持久化管理(将session放在磁盘中)。

6.session的id是从哪里来的

sessionID是如何使用的:当客户端第一次请求session对象时候,服务器会为客户端创建一个session(session的创建时间, 由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。 ,并将通过特殊算法算出一个session的ID,用来标识该session对象,当浏览器下次(session继续有效时)请求别的资源的时候,浏览器会偷偷地将sessionID放置到请求头中,服务器接收到请求后就得到该请求的sessionID,服务器找到该id的session返还给请求者==(Servlet)==(jsp编译成servlet时插入请求session对象的方法:HttpSession session = HttpServletRequest.getSession(true))会将使用。一个会话只能有一个session对象,对session来说是只认id不认人。

7.session其他问题

  • session是一个容器,可以存放会话过程中的任何对象。
  • session因为请求(request对象)而产生,同一个会话中多个request共享了一session对象,可以直接从请求中获取到session对象。
  • 其实,session的创建和使用总在服务端,而浏览器从来都没得到过session对象。但浏览器可以请求Servlet(jsp也是Servlet)来获取session的信息。客户端浏览器真正紧紧拿到的是session ID,而这个对于浏览器操作的人来说,是不可见的,并且用户也无需关心自己处于哪个会话过程中。
     

参考:JavaWeb学习-Session

Session机制详解

发布了30 篇原创文章 · 获赞 1 · 访问量 1158

猜你喜欢

转载自blog.csdn.net/chunchunlaila/article/details/104681065