会话跟踪

Servlet-平常笔记2java


什么是会话和会话跟踪?

  会话:能够简单理解为一个用户,打开了一个浏览器,访问某一个站点,访问web资源,而后关闭浏览器,这个过程就是一个会话。web

  会话跟踪:HTTP是无状态协议,也就是没有记忆力,这就产生了问题,每一个请求之间没法共享数据,在一个会话中,共享数据即会话跟踪。浏览器

 

会话跟踪方法:

  1)使用参数在请求中传递:在资源名称后面添加参数。安全

  格式:路径?参数名=参数值。session

  而后在须要使用该数据的地方经过request的getParameter()方法获取该参数值。spa

  2)使用Cookiecode

  Cookie:把须要共享的数据,保留在客户端(浏览器)中。对象

  步骤:接口

  /*建立Cookie*/
      Cookie c = new Cookie("currentname","test");   /*添加Cookie到响应中,传递给浏览器保存*/   response对象.addCookie(c);   /*在请求中获取Cookie和数据*/   Cookie[] cs = request对象.getCookies();
  /*修改Cookie指定名的value值*/
    方法一:获取Cookie对象后使用setValue()方法更改。
    方法二:从新建立一个同名的Cookie,覆盖原有的Cookie。    

  注意:修改以后,要调用response对象的addCookie()方法。生命周期

  /*Cookie的生命周期*/

    缺省状况:关闭浏览器后Cookie丢失。

    可经过setMaxAge(int seconds)方法来设置,可设置值为正数、负数和0.

    seconds>0:表示Cookie存活的时间。

    seconds<0:表示存放在浏览器进程中,缺省状况。

    seconds=0:表示删除Cookie。

  /*Cookie的路径和域范围*/

    Cookie对象.setPath(String path);

    若不设置,则使用存放CookieServlet资源名的相对路径。

    Servlet跳转时若路径不一样,则没法获取Cookies。

    设置在整个应用中在请求的时候都鞋带Cookie的方法:

    Cookie对象.setPath("/");

    

    在不一样应用/主机之间如何共享Cookie?

    经过设置域解决。

    先了解一下二级域名,二级域名须要配置好虚拟主机,常见的有百度的二级域名,如music.baidu.com、tiebai.baidu.com,这些二级域名之间都会共享登录信息。

    设置域的方法:

    Cookie对象.setPath("/");

    Cookie对象.setDomain(".baidu.com");

 

  3)HttpSession类

  javax.servlet.http.HttpSession HttpSession技术实际上仍是利用Cookie技术 

  session是一种服务端技术,把共享数据保存在服务端。(Cookie是保存在客户端)

  每个HttpSession对象,都有惟一的一个ID,是一个特殊的Cookie:

  • 这个Cookie的name是"JSESSIONID"。
  • 这个Cookie的value是该对象的id,一长串相似于地址的字符。

  方法:

    1.获取Session对象/建立Session对象。

    HttpSession s = request对象.getSession();  等同于getSession(true).

    HttpSession s = request对象.getSession(true); 若是当前有Session对象,直接返回,不然建立一个。

    HttpSession s = request对象.getSession(false); 若是当前有Session对象,直接返回,不然返回null。

    2.存储数据到Session中

    Session对象.setAttribute(String name, Object value);

    3.从Session中获取数据

    Object val = session对象.getAttribute(String name);

    4.修改session中的数据

    从新设置一个同名的属性名。

    5. 删除Session

    删除指定名称的数据:Session对象.removeAttribute(String name);

    删除整个Session对象:Session对象.invalidate(); 经常使用于注销登陆

    6.Session拓展

    封装多个信息做为对象存储到Session中。

    通常咱们习惯把Session对象让他实现序列化接口(java.io.Serializable),缘由是当多态服务集群的时候,彼此之间能够共享Session数据。

    序列化:把对象转换为二进制数据。

    反序列化:把二进制数据恢复成对象。

    该接口没有方法。

    7.Session超时管理

    Session对象.setMaxInactiveInterval(int seconds);

    表示上一次操做以后,指定时间内无交互,则Session会被自动销毁。(保证安全,释放内存)

    

  1.参数传递的方法会暴露敏感信息,不可行。

  2.Cookie也面临许多问题:一个Cookie只能存储一个简单类型的数据,value只能存String类型,当对象有多个属性时则不可行;Cookie的大小限制在4KB以内浏览器保存Cookie的个数也有限多人使用一台电脑,也会致使信息不安全。

  3.Tomcat中的Session默认超时时间为30分钟,通常20来分钟就销毁了。

相关文章
相关标签/搜索