实现Web程序的自动登录

简介:
本文为原创,如需转载,请注明作者和出处,谢谢!

有很多Web程序中第一次登录后,在一定时间内(如2个小时)再次访问同一个Web程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机)。实现这个功能关键就是服务端要识别客户的身份。而用Cookie是最简单的身从验证。

如果用户第一次登录,可以将用户名作为Cookie写到本地,代码如下:


Cookie cookie =  new Cookie("user", user);
cookie.setMaxAge(365 * 24 * 3600);
cookie.setPath("/");
response.addCookie(cookie);

    当用户再次访问程序时,服务端程序应该检测这个 Cookie 是否存在,代码如下:

Cookie[] cookies=request.getCookies();
for(Cookie cookie: cookies)
{
    if(cookie.getName().equals(user))
    {
         //  如果user Cookie存在,进行处理
         break;
    }
}

    尽管从客户端可以获得 User Cookie ,但这上 Cookie 可能存在很长时间,而且仅凭这个 Cookie 就自动登录并不安全,因此,可以在服务端使用一个 Session 来管理用户。也就是当第一次登录成功后,就创建一个 Session ,并将用户的某些信息保存在 Session 顺。代码如下:

HttpSession session =request.getSession();
session.setAttribute(user, user);
session.setMaxInactiveInterval(2 * 3600);   //  Session保存两小时

     
当再次访问程序时,确定了 cookie 存在后,就会继续验证 User Session 的存在,代码如下:

Cookie[] cookies=request.getCookies();
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 进行持久化。代码如下:

HttpSession session = request.getSession();
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,则按着pathname进行比较,如果这两个值相同,则认为是同一个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

    由于下面两个Cookiepath不同,因此,它们是完全不同的两个Cookie

Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web1

Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web2


谁有其他的方法(可以是任何语言或技术)实现自动登录,请跟贴!

本文转自银河使者博客园博客,原文链接http://www.cnblogs.com/nokiaguy/archive/2008/06/05/1214695.html如需转载请自行联系原作者


银河使者

相关文章
|
11月前
|
弹性计算 监控 网络安全
如何轻松使用AWS Web应用程序防火墙?
AWS WAF是Web应用防火墙,可防护常见网络攻击。通过创建Web ACL并设置规则,保护CloudFront、API网关、负载均衡器等资源。支持自定义规则与OWASP预定义规则集,结合CloudWatch实现监控日志,提升应用安全性和稳定性。
|
安全 JavaScript 前端开发
AppSpider 7.5.020 发布 - Web 应用程序安全测试
AppSpider 7.5.020 for Windows - Web 应用程序安全测试
284 0
|
11月前
|
存储 安全 Java
如何在 Spring Web 应用程序中使用 @SessionScope 和 @RequestScope
Spring框架中的`@SessionScope`和`@RequestScope`注解用于管理Web应用中的状态。`@SessionScope`绑定HTTP会话生命周期,适用于用户特定数据,如购物车;`@RequestScope`限定于单个请求,适合无状态、线程安全的操作,如日志记录。合理选择作用域能提升应用性能与可维护性。
427 1
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
1181 157
|
安全 测试技术 Linux
Acunetix v25.4 发布 - Web 应用程序安全测试
Acunetix v25.4 (Linux, Windows) - Web 应用程序安全测试
498 3
Acunetix v25.4 发布 - Web 应用程序安全测试
|
安全 Devops 测试技术
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
272 0
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
|
安全 JavaScript Java
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
287 12
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
|
自然语言处理 安全 测试技术
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
1055 0
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
|
监控 前端开发 JavaScript
使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践
使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践
428 6
|
数据可视化 数据库 开发者
使用Dash构建交互式Web应用程序
【10月更文挑战第16天】本文介绍了使用Python的Dash框架构建交互式Web应用程序的方法。Dash结合了Flask、React和Plotly等技术,让开发者能够快速创建功能丰富的数据可视化应用。文章从安装Dash开始,逐步介绍了创建简单应用程序、添加交互元素、部署应用程序以及集成更多功能的步骤,并提供了代码示例。通过本文,读者可以掌握使用Dash构建交互式Web应用程序的基本技巧和高级功能。