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>
密&nbsp;&nbsp;码:<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())的更多相关文章

  1. JSP内置九个对象Request请求对象

    jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...

  2. JSP内置对象——session

    sessionsession表示客户端与服务器的一次会话Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所进过的这段时间,也就是用户浏览这个网站所花费的时间从上述定义中可以看 ...

  3. jsp内置对象浅谈

    jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...

  4. JSP内置对象(上)

    在JSP中为了简化页面的开发提供了一些内置的对象.这些对象不需要由JSP的编写者通过new关键字实例化,他们都由容器实现和管理,在所有的JSP页面中都可以使用内置对象. JSP中共有9大内置对象: o ...

  5. 东软实训1 -jsp内置对象及其常用方法

    JSP 的内置对象及方法详细说明 一. request 对象 客户端的请求信息被封装在 request 对象中,通过它才能了解到客户的需 求,然后做出响应.它是 HttpServletRequest ...

  6. JSP内置对象seesion

    什么是session session表示客户端与服务器的一次会话 Web中的session指的是用户在浏览某网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间 从上述定 ...

  7. JSP内置对象解析

    out对象:(PrintWriter类的实例) 用来向客户端输出信息,除了输出各种信息外还负责对缓冲区进行管理: 主要方法: print / println void 输出数据 newLine() v ...

  8. JSP内置对象及常用方法

    jsp九大内置对象及四个作用域: 何为作用域 先让我们看看效果: 大概流程是这样的,我们访问index.jsp的时候,分别对pageContext, request, session,applicat ...

  9. JavaWeb学习----JSP内置对象详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. 【原创】mdk5宏定义的使用小结

    前几天在网上申请了一块芯片为stm32f103cbt6的小板子. 在用keil编程的过程中发现一些小问题,总结如下: 使用mdk5开发,与之前的库函数的引用方式已经改变.不需要在选项的c/c++标签页 ...

  2. postgresql删除属性

    PostgreSQL update and delete property from JSONB column up vote 2 down vote favorite From this artic ...

  3. 转 s3c2440硬件学习----内存管理单元MMU

    本篇基本是韦东山书上的 一.内存管理单元MMU介绍 内存管理单元简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.MMU使得每个用户进程拥有自己独立的地址空间,并通过内存访 ...

  4. form表单中的带有name的标签直接转JSON

    1. 将如下内容引入页面:比如说新建一个 a.js,然后在页面中引入a.js//将form表单序列化成json格式 $.fn.serializeObject = function () { var o ...

  5. php 项目简单分类

    项目分为:客户需求和自行研发. 商城项目:------------------------商城分类:单商家:商家就是网站所有者.如京东.凡客.          多商家:如淘宝 网站所有者不是卖家.  ...

  6. 利用JFreeChart绘制股票K线图完整解决方案

    http://blog.sina.com.cn/s/blog_4ad042e50100q7d9.html 利用JFreeChart绘制股票K线图完整解决方案 (2011-04-30 13:27:17) ...

  7. ios 做的一个三个数求平均数 最大数 最小数

    #import "ViewController.h" @interface ViewController ()@property (weak, nonatomic) IBOutle ...

  8. APUE读书笔记:关于sigsuspend

    sigsuspend是一个原子操作,为了防止信号丢失而存在的,具体含义看下函数原型. int sigsuspend(const sigset_t *mask); 先忽略参数,sigsuspend完成的 ...

  9. angular、bootstrap初稿搭建

    1.bootstrap3.0中,ie8不兼容响应式设计 @media,需要添加如下2个查件 <!-- html5.js for IE less than 9 -->     <!-- ...

  10. PHP数组函数试题

    使用Ctrl+A查看答案 1.将数组的键名全部转换成小写和大写的函数是什么?答:array_change_key_case($array [,CASE_LOWER|CASE_UPPER]) 2.创建一 ...