一:

1.介绍

  对于会话与状态管理,有两种方式,cookie与session。

  其中,cookie机制采用客户端保持cookie的方案。

  而,session机制采用的是服务器保持Http状态信息的方案。

  

2.响应方式

  以cookie的方式进行实现的。

  浏览器打开,对服务器进行访问,这时因为第一次进行访问,所以没有sessionId,所以服务端会新建一个HttpSession,将sessionId以set-cookie的方式将sessionId返回给浏览器,在这次会话中,浏览器进行下次访问服务端时,会以cookie的方式将返回的sessionId带上,与服务端保存的sessionId进行比较,完成下面的会话。

3.保存sessionId的几种方式

  保存sessionId可以采用cookie,这样交互过程中浏览器可以自动根据规则把这个标识发送给服务器。

  因为cookie会被禁用,因此必须有其他的机制能够把sessionId传递给服务器,经常采用的是URL重写,就是将sessionI附加到URL路径的后面。

4.Seeion cookie

  session通过SessionId区分不同的客户,以cookie或URL重写为基础的。

  默认使用cookie实现,系统会创造一个名为JSESSIONID的输出cookie,成为session cookie,以区别常说的cookie。

  session cookie是存储在浏览器的内存中,并不写到硬盘上,但是也可以进行持久化写到硬盘。

5.持久化程序

  在一段时间内再次打开浏览器,SessionId不会变。

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%=session.getId() %>
<%
Cookie cookie=new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60);
response.addCookie(cookie);
%>
</body>
</html>

二:session的生命周期

1.JSP什么时候不产生session对象

  若当前的JSP是客户端是web应用的第一个资源,切JSP的page指定的session属性值为false。

  当前的JSP不是客户端访问的第一个应用资源,且其他页面已经创建HttpSession对象,则当前的JSP会返回一个会话的HttpSession对象,而不是创建一个新的HttpSession对象。

2.Servlet什么时候产生session对象

  若servlet是客户端访问的第一个web应用资源,则只用调用了request.getSession()或者request.getSession(true)才会创建HttpSession对象。

3.session=“false”

  当前页面禁用HttpSession隐含对象。

  但是可以通过request.getSession(boolean flag),若flag为false,若没有和当前JSP页面关联的HttpSession对象,则返回null,若有,返回true。

若flag为true,若没有和当前JSP页面关联的HttpSession对象,则一定返回一个新创建的HttpSession,有,则直接返回。

4.销毁HttpSession

  调用session.invalidate(),该方法使HttpSession马上失效。

  服务器卸载当前应用。

  超出过期时间,以秒为单位,默认半个小时,可是设置,session.setMaxInactiveInterval(60)。

  注:不是关闭浏览器就关闭了HttpSession。

三:案例(重新登录与注销)

1.login.jsp

 <%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
SessionId:<%=session.getId() %><br><br>
SessIsNes:<%=session.isNew() %><br><br>
MaxInactiveInternal:<%=session.getMaxInactiveInterval() %><br><br>
createTime:<%=session.getCreationTime() %><br><br>
LastAccessTime:<%=session.getLastAccessedTime() %><br><br>
<%
Object username=session.getAttribute("userName");
if(username==null){
username="";
}
%> <form action="hello.jsp" method="post">
userName:<input type="text" name="userName"
value="<%=username%>"/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>

2.hello.jsp

 <%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
SessionId:<%=session.getId() %><br><br>
SessIsNes:<%=session.isNew() %><br><br>
MaxInactiveInternal:<%=session.getMaxInactiveInterval() %><br><br>
createTime:<%=session.getCreationTime() %><br><br>
LastAccessTime:<%=session.getLastAccessedTime() %><br><br>
Hello:<%=request.getParameter("userName") %><br><br> <%
session.setAttribute("userName", request.getParameter("userName"));
%>
<a href="login.jsp">重新登录</a>&nbsp;&nbsp;
<a href="loginOff.jsp">注销</a> </body>
</html>

3.loginOff.jsp

 <%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
SessionId:<%=session.getId() %><br><br>
SessIsNes:<%=session.isNew() %><br><br>
MaxInactiveInternal:<%=session.getMaxInactiveInterval() %><br><br>
createTime:<%=session.getCreationTime() %><br><br>
LastAccessTime:<%=session.getLastAccessedTime() %><br><br>
ByBye:<%=request.getAttribute("userName") %><br><br>
<a href="login.jsp">重新登录</a>&nbsp;&nbsp;
<%
session.invalidate();
%> </body>
</html>

4.效果

  

四:URL重写

1.方式

  一种补充的会话管理机制,它允许不支持Cookie的浏览器也可以与WEB服务器保持连续的会话。

  HttpServletResponse里定义了两个用于完成URL重写的方法

  encodeURL方法

  encodeRedirectURL方法

  上面的两种方式都一样。

2.encodeURL方式

  

五:

  

最新文章

  1. v$session中server为none与shared值解析
  2. HashSet与HashMap、Hashtable
  3. Python流程控制语句(Control Flow)
  4. 通过Bresenham算法实现完成矢量线性多边形向栅格数据的转化
  5. C++引用计数
  6. 用HiveDB横向切分MySQL数据库
  7. QQ音乐的请求
  8. Cocos2d-xvision3.0加载失败,和,Vs2012环境搭建
  9. 从零开始学C++之IO流类库(二):文件流(fstream, ifstream, ofstream)的打开关闭、流状态
  10. js 禁止复制粘贴全选
  11. xshell 图形化连接ubuntu
  12. 一些简单的例子让你在Java中能更好的学习并理解循环结构(1)!
  13. iconfont 字库入门到精通
  14. Bootstrap -- 表格样式、表单布局
  15. SQL Server - AS
  16. Teradata简介
  17. 爬虫实战——Scrapy爬取伯乐在线所有文章
  18. Jmeter BeanShell PostProcessor提取json数据
  19. tyvj:1038 忠诚 线段树
  20. mysql 使用如下三种方式应用where条件,从好到坏

热门文章

  1. 在升级Windows 8.1后,桌面的右下角显示&quot;SecureBoot未正确配置&quot;
  2. LibreOJ#6030. 「雅礼集训 2017 Day1」矩阵
  3. dubbo Filter
  4. soj1049.Mondriaan
  5. phpcm nginx 伪静态文件
  6. C语言编写守护进程
  7. 正则表达式入门之学习路线&amp;七个问题
  8. Sysmon + NXlog构建简单的windows安全监控
  9. Python标准库笔记(11) — Operator模块
  10. 系统架构之负载均衡【F5\nginx\LVS\DNS轮询\】