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 ...
 
随机推荐
- sqlserver 经典入门基础书籍
			
1.SQLServer2005T-SQL数据库设计 作者:胡百敬等著 ISBN:10位[7121053632]13位[9787121053634] 出版社:电子工业出版社 出版日期:2008-1-1 ...
 - storm 使用过程中遇到的问题
			
1 bolt不停重启,excutor无法启动. nimbus日志类似如下(), 2014-03-12 10:55:06 b.s.d.nimbus [INFO] Executor MITAS3-74-1 ...
 - MVC 数据绑定
			
在做Asp.Net MVC项目中,都知道View负责页面展示数据或者提供页面收集数据,而所展示的数据或者收集的数据都是从Controller的Action中获取或提交到Controller的Actio ...
 - nefu 1116 字符串加密
			
字符串加密 Problem : 1116 Time Limit : 1000ms Memory Limit : 65536K description 给你一段经过加密的字符串,我们称之为密文,现在请你 ...
 - Oracle record 解锁
			
Oracle修改表中记录时出现record is locked by another user的弹出框问题 是因为在操作表中数据时没有commit,导致表被锁. 执行下面两行语句: (1)查看被锁表的 ...
 - 产生一个int数组,长度为100,并向其中随机插入1-100,不重复
			
#define RANDOM(X) (rand() % X + 1) int main() { //标志数组 ] = {}; ] = {}; //默认的随机数种子是1,这样的话,每次执行这个程序都会得 ...
 - xmlHTTP技术资料
			
一.数据库远程管理技术 基于互联网的广域网现代应用中的一个重要环节是数据库远程监控.首先简单回顾一下互联网上的数据库远程管理技术的发展过程和方式: 早期通过编写CGI-BIN程序模块进行数据库远程管理 ...
 - 【转】linux ls -l的详解
			
原文:http://blog.csdn.net/sjzs5590/article/details/8254527 以root的家目录为例: 可以看到,用ls -l命令查看某一个目录会得到一个7个字段的 ...
 - 【jsp 分页】mysql limit方式进行分页
			
项目结构示意图: splitPage |-com.balfish.bean Goods.java |-com.balfish.dao GoodsDao.java |-com.bal ...
 - Spring Boot 系列教程17-Cache-缓存
			
缓存 缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找.由于缓存的运行速度比内存快得多,故缓存的作用就是帮 ...