JSP内置对象--session对象(getId(),getCreationTime(),getLastAccessedTime(),isNew(),invalidate(),setAttribute(),getAttribute())
session对象是javax.servlet.http.HttpSession接口的实例,但是不像HttpServletRequest或HttpServletResponse一样,有父接口,他没有父接口。
HttpSession接口的主要方法:
1. java.lang.String getId():取得session ID
2. long getCreationTime():取得session的创建时间
3. long getLastAccessedTime():取得session的最后一次操作时间
4. boolean isNew():判断是否新的session(新用户)
5. void invalidate():让session失效
6. java.util.Enumeration<java.lang.String> getAttributeNames():得到全部属性的名称
在整个session中, 最重要的部分 就是属性的操作,可是对于属性的操作除了之前的setAttribute(), getAttribute(),removeAttribute()以外,有个getValue(),putValue()都是deprecated。不建议使用,过时的。
- session ID
对于每个用户来说,都表示一个不同的session,服务器就是靠session id来区分每个用户的,每个通过浏览器连接到服务器上的用户都会服务器自动分配一个唯一的session id。
例子:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
String id = session.getId() ;
%>
<h3>SESSION ID:<%=id%></h3>
<h3>SESSION ID长度:<%=id.length()%></h3>
</body>
</html>
每个连接到服务器上的session id是不同的,通过浏览器区分。
但是需要注意,对于id的操作不是成对的。因为正常都是先有set方法再有get方法。
可以发现,之前的cookie自动设置的那个cookie就是每个用户的session id,如果关闭服务器,session id会重新分配。
原本的session id不保留,服务器关闭后,session id就没了。如果现在用户要求即使关闭服务器,也要保留session
id的话,需要用到序列化的机制。
所谓的对象序列化,指的是一个对象通过二进制保存或者进行传输,而且对象所在的类必须实现java.io.Serializable接口,对于session本身也需要完成这种序列化的操作,但是不是手工完成的,是需要自动配置完成,在tomcat\conf\server.xml里:
<Context path="/wly" docBase="D:\Workspace" reloadable="true">
</Context>
中间加入以下内容后,服务器即便关闭,session id会保存,而且会保留在d:\temp里一个序列化文件:
<Manager className="org.apache.catalina.session.PersistentManager">
debug=0 saveOnRestart="true"
maxActiveSession="-1" minIdleSwap="-1"
maxIdleSwap="-1" maxIdleBackup="-1"
<Store
className="org.apache.catalina.session.FileStore"
directory="d:\temp"/>
</Manager>
- 登录及注销
login.jsp:
自提交考虑空的问题;
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<form action="login.jsp" method="post">
用户名:<input type="text" name="uname"><br>
密 码:<input type="password" name="upass"><br>
<input type="submit" value="登陆">
<input type="reset" value="重置">
</form>
<% // 直接通过一个固定的用户名和密码
String name = request.getParameter("uname") ;
String password = request.getParameter("upass") ;
if(!(name==null || "".equals(name) || password==null || "".equals(password))){
if("lixinghua".equals(name) && "mldn".equals(password)){
// 如果登陆成功,则设置session属性范围。
session.setAttribute("userid",name) ;
response.setHeader("refresh","2;URL=welcome.jsp") ;
%>
<h3>用户登陆成功,两秒后跳转到欢迎页!</h3>
<h3>如果没有跳转,请按<a href="welcome.jsp">这里</a>!</h3>
<%
} else {
%>
<h3>错误的用户名或密码!</h3>
<%
}
}
%>
</body>
</html>
welcome.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<% // 如果已经设置过了session属性,则肯定不为空
if(session.getAttribute("userid")!=null){
%>
<h3>欢迎<%=session.getAttribute("userid")%>光临本系统,<a href="logout.jsp">注销</a></h3>
<%
} else { // 没有session,则应该给出提示,先去登陆
%>
<h3>请先进行系统的<a href="login.jsp">登陆</a>!</h3>
<%
}
%>
</body>
</html>
logout.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
response.setHeader("refresh","2;URL=login.jsp") ;
session.invalidate() ; // 注销,表示当前的session失效
%>
<h3>您已成功退出本系统,两秒后跳转回首页!</h3>
<h3>如果没有跳转,请按<a href="login.jsp">这里</a>!</h3>
</body>
</html>
以上做法是属于session使用最多的一种登录验证的操作,除此之外还有4种技术
1. 通过session保存的方法
2. 通过cookie
3. 通过表单的隐藏域完成
4. 通过地址重写
以后本书的struts讲解这块,很多时候都通过地址重写的方式进行。
- 判断新用户
在session对象中可以用isNew()方法来判断一个用户是否是第一次访问页面
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
if(session.isNew()){
%>
<h3>欢迎新用户光临!</h3>
<%
} else {
%>
<h3>您已经是老用户了!</h3>
<%
}
%>
</body>
</html>
运行时,因为服务器已经设定cookie了,重新打开一个浏览器,才是新用户。
- 取得用户操作时间
要想取得一个session的具体操作时间,可以通过计算来获得。
getLastAccessedTime()-getCreationTime()
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
long start = session.getCreationTime() ;
long end = session.getLastAccessedTime() ;
long time = (end - start) / 1000 ;
%>
<h3>您已经停留了<%=time%>秒!</h3>
</body>
</html>
session的登录和注销最重要:setAttribute() , getAttribute(),invalidate();
每一个session id就表示一个用户。
JSP内置对象--session对象(getId(),getCreationTime(),getLastAccessedTime(),isNew(),invalidate(),setAttribute(),getAttribute())的更多相关文章
- JSP内置九个对象Request请求对象
jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...
- JSP内置对象——session
sessionsession表示客户端与服务器的一次会话Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所进过的这段时间,也就是用户浏览这个网站所花费的时间从上述定义中可以看 ...
- jsp内置对象浅谈
jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...
- JSP内置对象(上)
在JSP中为了简化页面的开发提供了一些内置的对象.这些对象不需要由JSP的编写者通过new关键字实例化,他们都由容器实现和管理,在所有的JSP页面中都可以使用内置对象. JSP中共有9大内置对象: o ...
- 东软实训1 -jsp内置对象及其常用方法
JSP 的内置对象及方法详细说明 一. request 对象 客户端的请求信息被封装在 request 对象中,通过它才能了解到客户的需 求,然后做出响应.它是 HttpServletRequest ...
- JSP内置对象seesion
什么是session session表示客户端与服务器的一次会话 Web中的session指的是用户在浏览某网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间 从上述定 ...
- JSP内置对象解析
out对象:(PrintWriter类的实例) 用来向客户端输出信息,除了输出各种信息外还负责对缓冲区进行管理: 主要方法: print / println void 输出数据 newLine() v ...
- JSP内置对象及常用方法
jsp九大内置对象及四个作用域: 何为作用域 先让我们看看效果: 大概流程是这样的,我们访问index.jsp的时候,分别对pageContext, request, session,applicat ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- dom入门
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). //显示,改变html内容 document.getElementById("p1" ...
- Ubuntu为已经安装的PHP7单独编译mysqli
编译安装PHP7后没有在ext中没有生成mysqli.so等文件,现在单独编译安装mysqli php7安装的位置:/usr/local/php7/ 我的扩展目录:/usr/local/php7/li ...
- IIS6 伪静态
1. 设置IIS--主目录--脚本映射那一个属性 2.必须还要上传自己的urlrewriter组件,并在config里做相应的设置 二者缺一不可
- hdu_2089_不要62(数位DP)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:中文,不解释 题解:dp[i][j]表示当前第i位的前一个数为j,然后记忆化dfs,注意的 ...
- how to use the curses library in unix?
In linux, you can use the ncurses library to use the terminal as a text buffer: move the cursor arou ...
- Java 学习路线
java 入门到精通 转自:http://forum.hibernate.org.cn作者:robbinJava Learning Path (一).工具篇 一. JDK (Java Develop ...
- isPostBack原理
从 到输入用户名,点击提交按钮 这个过程就叫做postback(是两个不同的状态) 利用ispostback原理,实现是否第一次进入处理程序(上一个用用户名判断的不好,会导致在用户名空的情况下 ...
- 贪心+bfs 或者 并查集 Codeforces Round #268 (Div. 2) D
http://codeforces.com/contest/469/problem/D 题目大意: 给你一个长度为n数组,给你两个集合A.B,再给你两个数字a和b.A集合中的每一个数字x都也能在a集合 ...
- 推翻自己和过往,重学自定义View
http://blog.csdn.net/lfdfhl/article/details/51671038 深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 A ...
- Toolbar Painter 工具条制作
工具条制作工具(ToolBarPainter2013.exe),专为程序猿设计,界面开发必备.当用VC编程制作工具条时,需要为工具栏上每一个button添加图标,是一件极其繁琐的事情,该工具可利用已有 ...