有很多Web程序中第一次登录后,在一定时间内(如2个小时)再次访问同一个Web程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机)。实现这个功能关键就是服务端要识别客户的身份。而用Cookie是最简单的身从验证。
如果用户第一次登录,可以将用户名作为Cookie写到本地,代码如下:
cookie.setMaxAge(365 * 24 * 3600);
cookie.setPath("/");
response.addCookie(cookie);
当用户再次访问程序时,服务端程序应该检测这个Cookie是否存在,代码如下:
for(Cookie cookie: cookies)
{
if(cookie.getName().equals(user))
{
// 如果user Cookie存在,进行处理
break;
}
}
尽管从客户端可以获得User Cookie,但这上Cookie可能存在很长时间,而且仅凭这个Cookie就自动登录并不安全,因此,可以在服务端使用一个Session来管理用户。也就是当第一次登录成功后,就创建一个Session,并将用户的某些信息保存在Session顺。代码如下:
session.setAttribute(user, user);
session.setMaxInactiveInterval(2 * 3600); // Session保存两小时
当再次访问程序时,确定了cookie存在后,就会继续验证User Session的存在,代码如下:
for(Cookie cookie: cookies)
{
if(cookie.getName().equals(user))
{
if(session.getAttribute(user) != null)
{
// 直接forward到主界面
break;
}
else
{
// forward到登录界面
}
}
}
虽然上面的代码可以很好地实现自动登录功能,但是当浏览器关闭,再次启动后,由于Servlet用于保存Session ID的JSESSIONID Cookie是临时的(也就是说不是持久Cookie,当浏览器关闭后,这个Cookie就会被删除),因此,需要将JSESSIONID进行持久化。代码如下:
session.setAttribute(user, user);
session.setMaxInactiveInterval(2 * 3600); // Session保存两小时
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(2 * 3600); // 客户端的JSESSIONID也保存两小时
session.setMaxInactiveInterval(interval)
cookie.setPath("/");
response.addCookie(cookie);
如果使用上面的代码,即使浏览器关闭,在两小时之内,Web程序仍然可以自动登录。
如果我们自已加一个JSESSIONID Cookie,在第一次访问Web程序时,HTTP响应头有两个JSESSIONID,但由于这两个JSESSIONID的值完全一样,因此,并没有任何影响。如果在响应头的Set-Cookie字段中有多个相同的Cookie,则按着path和name进行比较,如果这两个值相同,则认为是同一个Cookie,最后一个出现的Cookie将覆盖前面相同的Cookie,如下面的两个Cookie,最后一个将覆盖前一个:
Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web
Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web
由于下面两个Cookie的path不同,因此,它们是完全不同的两个Cookie:
Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web1
Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web2
相关推荐
使用Java Servlet实现自动登录退出功能是Web应用程序中一个非常重要的功能,本文将详细介绍如何使用Java Servlet实现自动登录退出功能。 知识点1:了解Java Servlet Java Servlet是一个Java类库,用于开发基于Web...
《Java Web程序设计任务教程》配套资源.zip是一个包含与Java Web开发相关的学习材料的压缩包。这个资源包可能包括源代码、示例项目、练习题、文档和其他有助于深入理解Java Web编程概念的材料。以下是对这些知识点的...
Selenium是一个用于Web应用程序自动化的工具,可以模拟用户的行为来自动获取网络资源。在本例中,我们使用了Firefox浏览器来模拟用户的行为。 首先,我们需要设置Firefox浏览器的驱动程序,这是因为Selenium需要...
在IT行业中,尤其是在Java Web项目的开发与维护过程中,自动化打补丁包是一个高效且重要的环节。这个过程可以显著提升开发团队的工作效率,减少手动操作带来的错误,并确保项目的稳定性和安全性。下面将详细解释标题...
《Java Web程序开发范例宝典 源码1-10》是一个涵盖了Java Web开发全方位实例的资源集合,旨在帮助开发者深入理解并熟练掌握Java Web应用的开发技术。源码1-10可能代表着一系列从基础到进阶的示例项目,每个项目都...
### Java Web程序设计实验报告知识点解析 #### 实验项目七:监听和过滤 **实验项目性质与要求**:本实验项目属于验证性实验,为必修项目,计划学时为2学时。实验旨在深入理解和实践Java Web开发中的监听器和过滤器...
Java Web程序设计是Web开发中的重要一环,它结合了Java语言的强大功能和Web应用的交互性。本教程由黑马程序员编著,旨在帮助学习者深入理解并掌握Java Web编程的核心概念和技术。教程覆盖了从基础到进阶的15个章节,...
【Java Web程序开发项目资源】是一个综合性的学习资料包,主要涵盖了使用Eclipse IDE进行Java Web应用程序开发的相关知识。这个项目旨在帮助开发者理解和掌握如何在Eclipse环境下搭建、设计和实现Web应用程序。以下...
Java Web技术是软件开发领域中的一个重要分支,它涵盖了构建基于Web的应用程序所需的各种技术和框架。这份"Java Web从入门到精通_PPT"很可能是提供了一个系统化的学习路径,旨在帮助初学者逐步掌握这一领域的核心...
Java Web中级部分的知识涵盖了许多关键领域,这些都是在开发基于Java的Web应用程序时不可或缺的技能。以下是对这些领域的详细概述: 1. HTML(超文本标记语言):HTML是Web页面的基础,用于定义页面结构和内容。它...
"java web自动登陆和乱码过滤器"的主题主要涵盖两个核心知识点:自动登录功能的实现和解决字符编码问题。 首先,我们来探讨自动登录功能。在许多Web应用中,为了提供更好的用户体验,开发者通常会实现“记住我”或...
在Java编程语言中,实现自动登录功能涉及到多个关键知识点,包括网络通信、HTTP协议、Cookie管理、Session处理以及可能的加密解密技术。...通过这些知识,你可以构建一个能够自动登录Web应用的Java程序。
在这个"java实现的一个分页程序"中,我们可以探讨几个关键知识点: 1. **JDBC分页**:Java中的分页通常通过Java Database Connectivity (JDBC) API来实现。使用PreparedStatement和Statement对象,我们可以在SQL...
将Java程序转化为Web服务是一个涉及多个步骤和技术的过程,主要通过使用Web服务框架如Apache Axis来实现。下面将详细解析这一过程中的关键知识点。 ### 一、理解Web服务 Web服务是一种在不同应用之间进行通信的...
【Java Web应用开发项目教程】是由资深讲师聂明编写的,旨在帮助学习者掌握Java Web应用程序的开发技术。本教程以实战项目为导向,通过详细的教学PPT,将理论与实践相结合,让学习者能深入理解并应用Java Web开发的...
Java Web开发软件是用于构建和部署Web应用程序的强大工具集,主要针对使用Java语言进行服务器端编程的场景。在Java Web开发中,开发者可以利用一系列框架、库和集成开发环境(IDE)来创建功能丰富的动态网站、企业级...
- **Web程序**:即网站应用,主要通过HTML、CSS和JavaScript构建前端界面,并通过服务器端语言(如Java、PHP等)处理业务逻辑。 - **命令行程序**:例如Linux下的shell脚本或命令行工具,这类程序通常用于自动化任务...
### Java Web 测试题解析及知识点详解 #### 题目背景 本套测试题旨在检验学生对Java Web基础知识的理解程度以及对Java编程语言的基本掌握情况。题目涵盖了Java语言的基础特性、面向对象的概念、基本数据类型操作、...
这本书的核心目标是帮助读者理解和掌握如何使用Java语言构建动态、交互式的Web应用程序。书中不仅提供了理论知识,还配以实际的光盘源码,以便读者能够通过实践来深化理解。 Java Web开发主要包括以下几个关键知识...