cookie实现自动登录

  有很多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,则按着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

  致谢:感谢您的耐心阅读!

时间: 2024-10-14 18:23:16

cookie实现自动登录的相关文章

iOS UIWebView 通过 cookie 完成自动登录验证

一些说明: 通过UIWebView登录后,会自动得到web服务器设置的cookie包括服务器中的seesionid. cookie不会自动保存在app里面,需要通过设置才能在下次启动app时获取. 自动登录,需要设置header,才能将cookie带给web服务器. 自动登录,需要web服务器端进行cookie验证方可登录. 实现流程: 1. 做好Sign in页面后,通过get或post递交表单给web服务器,可以通过下面的代码遍历得到的cookie. NSHTTPCookieStorage

.net mvc 利用cookie实现自动登录 退出后注销信息

1.登录Action中将用户信息加入到cookie中: HttpCookie cookie = new HttpCookie("useridMsg"); cookie.Expires= DateTime.Now.AddDays(7); cookie["userid"] = 你的用户id: Response.Cookies.Add(cookie); 2.创建类CookieFilter并继承FilterAttribute和IActionFilter 实现抽象IActio

php登录页面cookie自动登录及验证

<?php //cookie实现自动登录 error_reporting(0);// 关闭错误报告(浏览页面出现notice可用此法消除) $user = $_POST['username'];$pwd = $_POST['password'];if ($user!=''&&$pwd!=''){if($_POST['remmber']==1){ header("Location:http://localhost/homework/login.php"); //转到

自己Cookie写的自动登录功能

sql表 username  password字段 User类 有 id username password等字段 Service有一函数 1 @Override 2 3 public User findUser(String username) 4 { 5 return userDao.findUser(username); 6 } 实现 1 @Override 2 public User findUser(String username) { 3 try { 4 return qr.quer

SpringMVC中使用Interceptor+Cookie实现在一定天数之内自动登录

一 简介 本篇文章主要介绍:在SpringMVC中如何使用Interceptor+Cookie实现在一定天数之内自动登录的功能.同时还介绍"如果校验失败则跳转到登录页面,在输入用户名.密码等完成登录之后又自动跳转到原页面"的功能实现 本次测试环境是SSM框架,在正式介绍本篇文章之前,建议需要熟悉以下前置知识点: Mybatis中使用mybatis-generator结合Ant脚本快速自动生成Model.Mapper等文件(PS:这是为了快速生成一些基本文件)   https://www

如何设计相对安全的cookie自动登录系统

很多网站登录的时候,都会有一个"记住我"功能,用户可以在限定时间段内免登录, 比如豆瓣.人人.新浪微博等都有这种设计.这种技术其实就是基于 cookie的自动登录, 用户登录的时候会把需要验证的token写到cookie里面,当用户session失效的时候, token会通过cookie 发送给服务器端,服务器端解析token判断是否已经登录: 这里面的token如何设计是关键,到底存什么数据才能保证系统的安全性呢? 有些新手可能会想,把用户id和password直接md5加密存到co

yii2 自动登录解读

今日遇到一个需要将当前用户,全部登出系统(YII2框架制作)重新登录的需求 仔细回忆一遍,Yii2的登录流程,竟然有些不太明白,于是下午空闲时 重新看了下Yii2的用户登录源码 文件位于YII2项目下:vender/yiisoft/yii2/web/User.php /** * @身份属性类对象 是一个 实现IdentityInterface接口的一个对象 */ public $identityClass; /** * @var bool 属性 是否使用(cookie)自动登录 */ publi

COOKIE实现用户自动登录

<?php     header('content-type:text/html;charset=utf-8');    if(!empty($_POST)) {        $name = $_POST['name'];        $psw  = $_POST['psw'];        if($name=='jack'&&$psw=='rose') {            echo 1;            exit;        } else {         

[原创]java WEB学习笔记29:Cookie Demo 之自动登录

1. 自动登录 的需求 ① 不需要填写用户名和密码等信息,可以自动登录到系统 ②  login.jsp  hello.jsp login.jsp 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01