Session介绍

1、Session简单介绍

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

2、Session实现与工做原理

      浏览器和服务器采用http无状态的通信,为了保持客户端的状态,使用session来达到这个目的。在session机制中,也采用了这样的一个惟一的session_id来标示不一样的用户,不一样的是:浏览器每次请求都会带上由服务器为它生成的session_id。html

     简单介绍一下流程:当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时将标示session的session_id传递给客户端浏览器,浏览器将这个session_id保存在内存中(还有其余的存储方式,例如写在url中),咱们称之为无过时时间的cookie。浏览器关闭后,这个cookie就清掉了,它不会存在用户的cookie临时文件。java

     之后浏览器每次请求都会额外加上这个参数值,再服务器根据这个session_id,就能取得客户端的数据状态。
若是客户端浏览器意外关闭,服务器保存的session数据不是当即释放,此时数据还会存在,只要咱们知道那个session_id,就能够继续经过请求得到此session的信息;可是这个时候后台的session还存在,可是session的保存有一个过时时间,一旦超过规定时间没有客户端请求时,他就会清除这个session。web

    下面介绍一下session的存储机制,默认的session是保存在files中,即以文件的方式保存session数据。在php中主要根据php.ini的配置session.save_handler来选择保存session的方式。浏览器

    这里顺便说明一下,若是要作服务器的lvs,即多台server的话,咱们通常使用memcached的方式session,不然会致使一些请求找不到session。缓存

   一个简单的memcache配置:服务器

   session.save_handler = memcache
   session.save_path = "tcp://10.28.41.84:10001"
   固然若是必定要使用files文件缓存,咱们能够将文件做nfs,将全部的保存session文件定位到一个地方。
   刚才讲返回给用户的session-id最终保存在内存中,这里咱们也能够设置参数将其保存在用户的url中。cookie

3、session对象的生命周期

问题:用户开一个浏览器访问一个网站,服务器是否是针对此次会话建立一个session? 
答:不是的。session的建立时机是在程序中第一次去执行request.getSession();这个代码,服务器才会为你建立session。 
问题:关闭浏览器,会话结束,session是否是就销毁了呢? 
答:不是的。session是30分钟没人用了才会死,服务器会自动摧毁session。session

  • 在web.xml文件中能够手工配置session的失效时间。例如:app

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>day07</display-name> <!-- 设置Session的有效时间:以分钟为单位--> <session-config> <session-timeout>10</session-timeout> </session-config> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
  • 当须要在程序中手动设置Session失效时,能够手工调用session.invalidate方法,摧毁session。
  • HttpSession session = request.getSession(); // 手工调用session.invalidate方法,摧毁session session.invalidate();

总结:开一个浏览器访问服务器,第一次去执行request.getSession();那个代码,服务器为你建立session。而后故意不关闭浏览器,跑去玩了1个小时,session也没了,即便会话没结束,服务器发现session没人用也会将其摧毁掉。

4、session对象的建立和销毁时机

session对象的建立时机:在程序中第一次调用request.getSession()方法时就会建立一个新的Session,能够用isNew()方法来判断Session是否是新建立的。

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

5、session和Cookie的主要区别

  • Cookie是把用户的数据写给用户的浏览器。
  • Session技术把用户的数据写到用户独占的session中。
  • Session对象由服务器建立,开发人员能够调用request对象的getSession方法获得session对象。  

参照于文章:https://www.cnblogs.com/xdp-gacl/p/3855702.html

相关文章
相关标签/搜索