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. mysql字符集问题

    背景:数据库表信息乱码问题 影响:数据库连接初始化中断 原因:init_connect参数设置问题,参数为不可执行语句. 1.1 DB字符集参数 #数据库中的字符集设置(以下全部为修改过后的结果) m ...

  2. 实现ie6下的居中

    代码如下所示,转自 http://w3help.org/zh-cn/causes/RT8003 对于 text-align 的讨论. <div style="width:200px; ...

  3. Android 中OKHttp请求数据get和post

    1:在Android Studio 的 build.gradle下  添加 然后再同步一下 compile 'com.squareup.okhttp:okhttp:2.4.0'compile 'com ...

  4. Linux - CentOS6.5服务器搭建与初始化配置详解(下)

    传送带:Linux - CentOS6.5服务器搭建与初始化配置详解(上) 继续接着上面的安装,安装完后会出现下面界面 点击reboot重启 重启后可以看到下面的tty终端界面  因为这就是最小化安装 ...

  5. RESTful架构2--架构详解

    转自:RESTful架构详解 1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在200 ...

  6. CSS3秘笈:第九章

    1.链接状态:大部分浏览器支持4中基本的链接状态:未访问的链接.已访问的链接.访问者的鼠标正悬停在上方的链接.正被单击的链接.这些状态的4个对应伪类选择器分别是:link.:visited.:hove ...

  7. 缓存1 静态缓存-->读库保存成php文件 mkdir-->file_put_contents-->var_export -->include

    @mkdir()-->file_put_contents-->$data =  "<?php\nreturn ".var_export($setting, tru ...

  8. text-size-adjust的值为100% 代替值 none

    iPhone 横屏默认会放大文字,设置text-size-adjust会解决这个问题 一般用text-size-adjust:none 但建议用100%代替none text-size-adjust: ...

  9. Java 学习路线

    java 入门到精通  转自:http://forum.hibernate.org.cn作者:robbinJava Learning Path (一).工具篇 一. JDK (Java Develop ...

  10. JS调用OC方法

    - (void)myMethod:(CDVInvokedUrlCommand*)command { NSString* echo = [command.arguments objectAtIndex: ...