Session机制一(基础知识点)
一:
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>
<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>
<%
session.invalidate();
%> </body>
</html>
4.效果

四:URL重写
1.方式
一种补充的会话管理机制,它允许不支持Cookie的浏览器也可以与WEB服务器保持连续的会话。
HttpServletResponse里定义了两个用于完成URL重写的方法
encodeURL方法
encodeRedirectURL方法
上面的两种方式都一样。
2.encodeURL方式

五:
Session机制一(基础知识点)的更多相关文章
- C#基础知识之理解Cookie和Session机制
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 【原创】Java基础之Session机制
Session机制 JSESSIONID是Session的标识,当客户端请求服务器端的时候,服务器端会检查是否已经给这个客户端创建过Session,也就是看客户端的请求中的header是否有Cooki ...
- HTTP基础--cookie机制和session机制
1.介绍cookie和session的区别,怎么获取与使用?(这个问题比较开放,可深可浅,现在将这里涉及的主要问题总计如下答案) 答: 一.cookie机制和session机制的区别 cookie机制 ...
- Redis基础知识点面试手册
Redis基础知识点面试手册 基础 概述 数据类型 STRING LIST SET HASH ZSET(SORTEDSET) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...
- .NET基础知识点
.NET基础知识点 l .Net平台 .Net FrameWork框架 l .Net FrameWork框架提供了一个稳定的运行环境,:来保障我们.Net平台正常的运转 l 两种交 ...
- Cookie/Session机制详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 理解Cookie和Session机制(转)
目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...
- session机制详解以及session的相关应用
session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求,当碰到这样的 ...
- Cookie/Session机制
这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...
随机推荐
- Spark记录-Scala基础语法
如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进 ...
- wsimport生成客户端 指定编码格式
wsimport -encoding utf- -keep -s D:\temp -p com.lawyer.user -verbose http://服务地址?wsdl -encoding : 指定 ...
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第二部分(Page 7)
编写你的第一个 Django app,第二部分(Page 7)转载请注明链接地址 本教程上接前面的教程.我们会配置数据,创建你的第一个 model,并对Django 自动生成的 admin 站点进行快 ...
- a标签伪元素选择器
a{ color: black; } /*未访问的链接*/ a:link{ color: red; } /*访问过的链接*/ a:visited{ color: green; } /*鼠标经过时*/ ...
- bzoj1485 有趣的数列
传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1485 [题解] Catalan数,注意不能直接用逆元,需要分解质因数. # include ...
- python初步学习-python 模块之 sys(持续补充)
sys sys 模块包括了一组非常实用的服务,内含很多函数方法和变量 sys 模块重要函数变量 sys.stdin 标准输出流 sys.stdout 标准输出流 sys.stderr 标准错误流 sy ...
- P1879 [USACO06NOV]玉米田Corn Fields (状压dp入门)
题目链接: https://www.luogu.org/problemnew/show/P1879 具体思路: 我们可以先把所有合法的情况枚举出来,然后对第一行判断有多少种情况满足,然后对于剩下的行数 ...
- iOS学习笔记(3)— 屏幕旋转
一.屏幕旋转机制: iOS通过加速计判断当前的设备方向和屏幕旋转.当加速计检测到方向变化的时候,屏幕旋转的流程如下: 1.设备旋转时,系统接收到旋转事件. 2.系统将旋转事件通过AppDelegate ...
- Dummynet模拟高时延网络场景(Windows7)
如果安装时出现:my_socket failed 2, cannot talk to kernel module 请查看是否以管理员方式运行,如果是,再判断当前操作系统是否为Win7 64位,如果是, ...
- 2018ICPC南京网络赛
2018ICPC南京网络赛 A. An Olympian Math Problem 题目描述:求\(\sum_{i=1}^{n} i\times i! \%n\) solution \[(n-1) \ ...