使用Cookie记住多个登录账号!

看下图:只要是多个不同的用户在这台电脑上用他们的账号登录成功了,就记住他们的账号信息,但是为了安全起见,密码就不写入到Cookie中了,就算是加密了的密码也不要写入到Cookie中!我们只向Cookie中写入账号!然后用下拉列表框把这些登录成功了的账号加载出来!

使用Cookie记住多个登录账号!_第1张图片

使用Cookie记住多个登录账号!_第2张图片

可以使用json格式保存多个用户名,写入到Cookie中,到时候可以读取出该Cookie,使用下拉列表显示多个用户名,为了偷懒简单点,我这里暂时不用json格式了,就使用-中划线分隔

使用Cookie记住多个登录账号!_第3张图片

rememberUserNameCookie.jsp页面
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>    




登录页面,把用户名写入到Cookie中,使用Cookie记住用户名






登录页面,把用户名写入到Cookie中,使用Cookie记住用户名

可以使用json格式保存多个用户名,写入到Cookie中,到时候可以读取出该Cookie,使用下拉列表显示多个用户名,为了偷懒简单点,我这 里暂时不用json格式了,就使用-中划线分隔

1. 记住用户名(如果在同一个浏览器中,有多个用户使用不同的用户名登录网站,我们要把这些用户名都记住,下次网站的登录页面用下拉列表框加载这些用户名) 为了安全考虑,我们只记住用户名,不记住密码,就算是加密了的密码我们也不要记住(如果时间充裕的话,把记住多长时间的功能也做一下,可以让用户自己勾 选,勾选记住1分钟,记住1周,记住1年等等)

2.Cookie的名字是可以一样的,只要是不同的Web应用程序就可以,浏览器不会混淆这些相同名称的Cookie,因为domain(域)不一样。如 果是同一个Web应用程序中,Cookie的名字如果一样的话,会覆盖掉同名的Cookie

<% Date now = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:sss"); out.print("

当前时间:" + df.format(now) + "

"); %> <% Cookie[] cookies = request.getCookies(); boolean flag = false; Cookie accountCookie = null; if (cookies != null) { for (Cookie cookie : cookies) { String cookieName = cookie.getName(); if ("account".equals(cookieName)) { // 有名字叫account的Cookie flag = true; accountCookie = cookie; break; } } if (flag) { String cookieValue = accountCookie.getValue(); String[] accounts = cookieValue.split("-"); //将Cookie中的用户名数组设置到request作用域范围中 request.setAttribute("accounts", accounts); for (int index = 0; index < accounts.length; index++) { System.out.println("我是rememberUserNameCookie.jsp页面,用户名:" + accounts[index]); } } } %>

测试的时候,尽量使用英文来测试,暂时别使用中文测试

用户名(账号):

在此台电脑上登录过的用户列表:



密码:

记住用户名     

下标索引:${statu.index} -数量:${statu.count}

${s}

使用javaScript编写带编辑输入功能的下拉列表框



Window对象中的属性和方法和子对象




名字叫Login的servlet

package com.jiongmeng.servlet;

import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 测试把用户名写入Cookie中
 */
@WebServlet("/Login")
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
   

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 把用户名写入Cookie中,所以我这里只获取用户名,就不获取密码了
		String account = request.getParameter("account");
		
		//注意:写入和读取Cookie时,如果有中文,容易导致报错
		account = URLEncoder.encode(account, "utf-8");
		
		// 是否记住用户名(账号)的标识 (如果checkbox的value值没有写,那么获取checkbox的value时,就会得到on)
		String isRemember = request.getParameter("isRemember");
		System.out.println("是否记住用户名(账号)标识" + isRemember);
		if (isRemember != null) {// 复选框勾选了记住用户名
			//记住用户名的时间
			String rememberTime = request.getParameter("rememberTime");
			if (rememberTime != null) {
				int rememberTime_int = Integer.parseInt(rememberTime);
				System.out.println("记住账号时间" + rememberTime_int);
				Cookie cookie = new Cookie("account", account);
//				 cookie.setMaxAge(2 * 365 * 24 * 60 * 60); //在客户端(浏览器)中保存2年
				cookie.setMaxAge(rememberTime_int); // 设置在客户端(浏览器)中保存的时间
				response.addCookie(cookie); // 写COOKIE
			}
			
		}
		
		
		// 使用javascript无法读取HttpOnly=true的cookie,安全性更高
		// 在cookie中设置了HttpOnly属性=true,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击
		// javascript无法读取到HttpOnly=true的cookie信息,但是服务器端仍然可以使用java语言读取到cookie信息
		// cookie.setHttpOnly(true);
		
//		showCookies(request, response);
		
		setCookies(request, response);
		//转发
//		request.getRequestDispatcher("/rememberUserNameCookie.jsp").forward(request, response);
		//重定向
		response.sendRedirect(request.getContextPath() + "/rememberUserNameCookie.jsp");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
	
	protected void showCookies(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Cookie[] cookies = request.getCookies();
		if (cookies != null) {
			for (Cookie cookie : cookies) {
				String cookieName = cookie.getName();
				String cookieValue = cookie.getValue();
				cookieValue = URLDecoder.decode(cookieValue, "utf-8");
				System.out.println("cookieName=" + cookieName + " cookieValue=" + cookieValue);
			}
		}
	
	}
	
	protected void setCookies(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Cookie[] cookies = request.getCookies();
		boolean flag = false;
		Cookie accountCookie = null;
		if (cookies != null) {
			for (Cookie cookie : cookies) {
				String cookieName = cookie.getName();
				if ("account".equals(cookieName)) {
					// 有名字叫account的Cookie
					flag = true;
					accountCookie = cookie;
					break;
				}
			}
			if (flag) {
				String cookieValue = accountCookie.getValue();
				System.out.println("*********" + cookieValue + "*********");

				/**
				 * 可以使用json格式保存多个用户名,写入到Cookie中,到时候可以读取出该Cookie,使用下拉列表显示多个用户名,为
				 * 了偷懒简单点,我这里暂时不用json格式了,就使用-中划线分隔
				 */
System.out.println("account=" + request.getParameter("account") + "=======================");
				cookieValue += "-" + request.getParameter("account");
				System.out.println("------" + cookieValue + "------");
				String isRemember = request.getParameter("isRemember");
				if (isRemember != null) {// 复选框勾选了记住用户名
					// 记住用户名的时间
					String rememberTime = request.getParameter("rememberTime");
					if (rememberTime != null) {
						int rememberTime_int = Integer.parseInt(rememberTime);
						Cookie cookie = new Cookie("account", cookieValue);
						cookie.setMaxAge(rememberTime_int); // 设置在客户端(浏览器)中保存的时间
						response.addCookie(cookie); // 写COOKIE
					}
				}
			}
		}
	}
	
}

你可能感兴趣的:(使用Cookie记住多个登录账号!)