session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
  当程式需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个和此session相关联的session id。保存这个session id的方式能采用cookie,这样在交互过程中浏览器能自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID,而。比如weblogic对于web应用程式生成的cookie,JSESSIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,他的名字就是JSESSIONID。这个session cookie是保存在浏览器的内存中的。

  “只要关闭浏览器,session就消失了”,这是一种很不严禁的说法。session是服务器创建的,要想删除session除非程序通知服务器删除一个session,否则服务器会一直保留。

然而浏览器是不会在关闭的时候通知服务器他将要关闭,因此服务器根本不会知道浏览器已关闭。之所以会有这种错觉,是因为大部分session机制都使用会话cookie来保存session id,

而关闭浏览器后这个cookie 是会销毁的所以这个session id就消失了,再次连接服务器时也就无法找到原来的session。

如果服务器设置的cookie被保存到硬盘上,或使用某种手段改写浏览器发出的HTTP请求头(URL重写),把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。

session持久化:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= session.getId() %>
<%
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(20);//session持久化 20秒当浏览器关闭20秒内这个session id依然存在
response.addCookie(cookie);
%>
</body>
</html>

URL重写:
  Web 服务器在返回Response的时候,检查页面中所有的URL,包括所有的连接,和HTML Form的Action属性,在这些URL后面加上“;jsessionid=XXX”。 
下一次,用户访问这个页面中的URL。jsessionid就会传回到Web Server。

    <form action="<%= response.encodeURL("hello.jsp") %>" method="post">
username: <input type="text" name="username" value="<%= username %>"/>
<input type="submit" value="Submit"/>
</form> <a href="<%= response.encodeURL("login.jsp") %>">重新登录</a>

设置session超时:

 关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就能认为客户端已停止了活动,才会把session删除以节省存储空间。一般我们会在WEB.xml中配置

<session-config>
<session-timeout>30</session-timeout><!-- 30分钟-->
</session-config>

session的生命周期:

  1、session的创建时间

  一个常见的误解是以为session在有客户端访问时就被创建,事实是直到某web服务器调用HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历。由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭他,<%@ page  session="false"%>。注意这个属性只是禁用了

jsp中session这个隐含对象,我们依然可以显式的使用session

<%
HttpSession session = request.getSession(true);
out.println(session);
out.print("<br>"); //获取 Session 的最大时效, 默认为 30 分钟.
out.print(session.getMaxInactiveInterval());
session.invalidate();
%>

   总结:session的创建时间是客户端第一次与wb服务器交互并且web服务器调用HttpServletRequest.getSession(true);

Session 对象的销毁:

①. 直接调用 HttpSession 的 invalidate()

②. HttpSession 超过过期时间.

  > 返回最大时效: getMaxInactiveInterval() 单位是秒  > 设置最大时效: setMaxInactiveInterval(int interval)

   > 可以在 web.xml 文件中配置 Session 的最大时效, 单位是分钟.

    <session-config>

      <session-timeout>30</session-timeout>

    </session-config>

③. 卸载当前 WEB 应用.       注意: 关闭浏览器不会销毁 Session!

session 学习的更多相关文章

  1. Session学习

    Session学习 Session的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为JSESSIONID的Cookie,这个JESSIONID对应这个服务器中的一个Session对象,通 ...

  2. 18、cookies与session学习笔记

    本文记录学习 cookies 和 session 的一些小练习和知识点   知识点1    cookies 和 session 的由来   HTTP协议是无状态的协议,因为一旦浏览器和服务器之间的请求 ...

  3. Serlvet之cookie和session学习

    HTTP 协议 Web通信需要一种语言,就像中国人讲中文,欧美说英文,Web使用的HTTP协议,也叫超文本协议. 使用HTTP协议的人分为两类:客户端和服务端.请求资源的角色是客户端,提供资源的是服务 ...

  4. Session学习小结

    前言: 1.我们在学习一项技术的时候,首先应该是什么时候会用到这项技术.这次学习session也是如此,一般的web项目中都有用户的存在,有用户那么就有了用户的管理,而用户往往是存在于session中 ...

  5. session学习总结【session原理、应用、与cookie区别】

    session原理 session也是一种记录浏览器状态的机制,但与cookie不同的是,session是保存在服务器中. 由于http是无状态协议,当服务器存储了多个用户的session数据时,如何 ...

  6. 保存会话数据——session学习

    Session:Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资 ...

  7. php session学习笔记(实例代码)

    http  无状态协议 一个服务器向客户端发送消息的时候有三条信息 一是状态二是头信息三是内容 会话控制 让一个用户访问每个页面,服务器都知道是哪个用户访问 cookie cookie是通过头信息发送 ...

  8. HTTP Session学习

    session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的含义也很不相同.这里只探讨HTTP S ...

  9. 【二十五】cookie与session学习总结

    一:cookie 1.创建cookie 关键字:setcookie 用于保存cookie 原理:当浏览器访问cookie.php页面时,我们的服务器就会以set-cookie的方式将cookie信息回 ...

随机推荐

  1. gulp 配置自动化前端开发

    有的人说,grunt已经廉颇老矣,尚能饭否.gulp已经成为了未来的趋势,或许将撼动grunt的地位. 那么就得看看gulp到底优势在哪里,在我最近的使用中发现,我的到了一个结论:“grunt廉颇老矣 ...

  2. webkit浏览器css设置滚动条

    主要有下面7个属性: ::-webkit-scrollbar 滚动条整体部分,可以设置宽度啥的 ::-webkit-scrollbar-button 滚动条两端的按钮 ::-webkit-scroll ...

  3. Android系统启动顺序

    Android是一个基于Linux的开源操作系统.x86(x86是一系列的基于intel 8086 CPU的计算机微处理器指令集架构)是linux内核部署最常见的系统.然而,所有的Android设备都 ...

  4. Sprint评审会议不是Sprint演示会议

    最近,Innolution公司的执行总监.Essential Scrum的作者Ken Rubin在其公司博客上撰写了一篇题为It’s a Sprint Review Not a Sprint Demo ...

  5. android 的闪屏效果

    android的闪屏效果,就是我们刚开始启动应用的时候弹出的界面或者动画,过2秒之后自动的跳转到主界面. 其实,实现这个效果很简单,使用Handler对象的postDelayed方法就可以实现.在这个 ...

  6. 初学python第二天

    今天我将用python来编写一款小游戏,用这个来总结一下自己学过的一些基础语法.没错,它就是井字游戏.想想自己第一接触这种游戏,还是小学生呢

  7. MATLAB不运行也不报错

    今天本来挺激动找到能运行的好几个程序 MATLAB忙到busy也是停不下来 本来不以为然 结果呢 吃了个水果 一杯水都喝下去了 还没结果(⊙o⊙) 这时候解决办法只有一个 Ctrl+c

  8. iOS开发零基础--Swift教程 数组

    数组的介绍 数组(Array)是一串有序的由相同类型元素构成的集合 数组中的集合元素是有序的,可以重复出现 Swift中的数组 swift数组类型是Array,是一个泛型集合 数组的初始化 数组分成: ...

  9. XStream学习笔记

    XStream 所需jar包: xstream-1.3.jar xpp3_min-1.1.4c.jar xmlpull-1.1.3.1.jar 目录: 1.注解去除,标签中带有包名的节点 2.注解修改 ...

  10. C# .NET 隐藏窗体

    隐藏窗体,打开窗体后如果想让它隐藏,然后再显示出来,就判断是不是NULL或者有没有关闭,不然就NEW一个出来,否则就SHOW出来. 当然如果有隐藏的话退出的时候最好用Application.Exit( ...