Day 11 Session
来源:互联网 发布:excite翻译软件 编辑:程序博客网 时间:2024/06/06 12:36
一.概述
1.session机制采用的是在服务器端保持 HTTP 状态信息的方案 (跟踪),和其对应的为Cookie。
2.过程:当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否包含了一个session标识(即sessionId),如果已经包含一个sessionId则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的session对象,但用户人为地在请求的URL后面附加上一个JSESSION的参数)。如果客户请求不包含sessionId,则为此客户创建一个session并且生成一个与此session相关联的sessionId,这个session id将在本次响应中返回给客户端保存。
3.使用Cookie来跟踪Session:session通过SessionID来区分不同的客户, session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出cookie,这称之为session cookie,session cookie是存储于浏览器内存中的,并不是写到硬盘上的,通常看不到JSESSIONID
二.HttpSession的生命周期
1.什么时候创建 HttpSession 对象
是否浏览器访问服务端的任何一个 JSP 或 Servlet,服务器都会立即创建一个 HttpSession 对象呢?不一定。
1)对于JSP:
>若当前的 JSP是客户端访问的当前 WEB 应用的第一个资源,且 JSP 的 page 指定的 session 属性值为 false, 则服务器就不会为 JSP 创建一个 HttpSession 对象;
>若当前 JSP 不是客户端访问的当前 WEB 应用的第一个资源,且其他页面已经创建一个 HttpSession 对象,则当前 JSP 页面会返回一个会话的 HttpSession 对象,而不会 创建一个新的 HttpSession‘ 对象
2)对于Servlet:若 Serlvet 是客户端访问的第一个 WEB 应用的资源,则只有调用了 request.getSession() 或 request.getSession(true) 才会创建 HttpSession 对象
2.page指令中的session=“false“ 到底表示什么意思?
当前 JSP 页面禁用 session 隐含变量!但可以使用其他的显式的 HttpSession 对象
如:HttpSession session=request.getSession(false);
3.在Servlet中如何获取Httpsession对象
>request.getSession(boolean create):create 为false,若没有和当前JSP页面关联的HttpServlet对象,则返回null,若有则返回true
create为true,一定返回一个HttpSession对象,若没有和当前JSP页面关联的HttpSession对象,则服务器创建一个HttpServlet对象返回。若有,直接返回关联的.
4.什么时候销毁 HttpSession 对象
1)直接调用HttpSession的invalidte()方法,使当前Session失效
2)服务器卸载了当前WEB应用
3)超过HttpSession的过期时间也会被销毁(默认1800s即半个小时)
>设置HttpSession的过期时间:session.setMaxInactiveInterval(5);单位为秒------相当于局部的
>在(tomcat下)web.xml文件中设置过期时间-------------相当于全局的,单位为分钟
5.并不是关闭了浏览器就销毁了Session
三.常用的Session的API
1.获取Session对象: request.getSession()
request.getSession(boolean create)
2.属性相关的: setAttribute方法
getAttribute方法
removeAttribute方法
getAttributeNames方法
3.使Session失效的:invalidate方法
4.设置其最大失效的时间的:setMaxInactiveInterval方法
5.getId方法:获得ID
getCreationTime方法:创建时间
getLastAccessedTime方法:最后一次访问时间
例:
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=UTF-8"><title>Insert title here</title></head><body>SessionID:<%=session.getId() %><br><br>isnew<%=session.isNew() %><br><br>maxinactiveinterval:<%=session.getMaxInactiveInterval() %><br><br>createtime<%=session.getCreationTime() %><br><br>lasttime:<%=session.getLastAccessedTime() %><br><br><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>
<%@ 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=UTF-8"><title>Insert title here</title></head><body>SessionID:<%=session.getId() %><br><br>isnew<%=session.isNew() %><br><br>maxinactiveinterval:<%=session.getMaxInactiveInterval() %><br><br>createtime<%=session.getCreationTime() %><br><br>lasttime:<%=session.getLastAccessedTime() %><br><br><br><br>hello:<%=request.getParameter("username") %><br><br><%session.setAttribute("username", request.getParameter("username"));%><a href="login.jsp">重新登录</a><a href="out.jsp">注销</a></body></html>
out.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=UTF-8"><title>Insert title here</title></head><body>SessionID:<%=session.getId() %><br><br>isnew<%=session.isNew() %><br><br>maxinactiveinterval:<%=session.getMaxInactiveInterval() %><br><br>createtime<%=session.getCreationTime() %><br><br>lasttime:<%=session.getLastAccessedTime() %><br><br><br><br>byebye:<%=session.getAttribute("username") %><br><br><%session.invalidate();%><a href="login.jsp">重新登录</a></body></html>
输入用户名,点击按钮
进入hello.jsp页面,点击注销
进入out.jsp页面,点击重新登陆
刷新sessionID用户名置空
》在Hello.jsp页面点击重新登陆后(SessionID依旧是之前的)
四.URL重写
将会话标识号以参数形式附加在超链接的URL地址后面的技术称为URL重写
如果在浏览器不支持Cookie或者关闭了Cookie功能的情况下,WEB服务器还要能够与浏览器实现有状态的会话,就必须对所有可能被客户端访问的请求路径(包括超链接、form表单的action属性设置和重定向的URL)进行URL重写。
HttpServletResponse接口中定义了两个用于完成URL重写方法:
encodeURL方法
encodeRedirectURL方法
例:
<form action="<%=response.encodeRedirectUrl("Hello.jsp") %>" method="post">username:<input type="text" name="username" value="<%=username%>"><input type="submit" value="submit"> </form>
- Day 11 Session
- Day 11-02 Session
- Day 11 Session (copy)
- day-11
- day-11
- StarWest 2010 - Day 3 - keynote, session and Expo
- day 11 (frequency 5)
- day 11数据库
- uestc 11 Judgment Day
- UI day 11 模态
- Summer day 11
- day 11 database
- day 11 总结
- Day 11 正则表达式
- 11day-导航控制器
- Java day 10-11
- day
- day\\\
- UFW防火墙简单设置
- Android App: 按键识别
- HDU 4001 To Miss Our Children Time【dp】
- do-while与while——求平均数
- 控件集合VB.NET用Controls集合对为空的控件进行遍历
- Day 11 Session
- Broadcast监听网络状态,ping判断网络是否可用
- GStreamer基础教程06——媒体格式和pad的Capabilities
- Codeforces 232E - Quick Tortoise bitset+分治
- VTK修炼之道32:边缘检测_梯度算子
- Android:Intent
- [AHK]语音识别
- 教辅的组成 洛谷1231 网络流
- 《计算机系统要素》学习笔记:第四章机器语言