JavaWeb技术中的cookie 记住账号密码功能(永久登录)

13 篇文章 0 订阅


前言

之前在做Java Web项目的时候遇到了需要记住账号和密码功能,但之前没做过,只做过C# .NET MVC的记住账号,突然不知道如何下手,然后去网上找资料,但是可能我理解能力不是很好,导致自己看的也不是很明白,然后就回过头去看当初使用C# .NET MVC技术做的代码,然后捣鼓了一会终于做出来了,但那个时候还没想到发布博客,直到现在做项目又遇到了这个功能,于是做完后立即发布出来供大家参考,如有不对的地方,请各位多多指教。

一、什么是cookie

Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
在这里插入图片描述

二、Java Web 案例 :记住账号和密码(永久登录)

在这基础上首先需要先完成正常登录的功能,这里只会讲解关于记住账号和密码的代码部分,

首先要记住密码,就需要在页面布局一个复选框。这个勾选的随意布,我这里用的是layui自带的
在这里插入图片描述
jsp页面代码:
这里的提交依旧使用的是:layui监听提交,因为简单,方便,这个不是重点。

重点是isOk这个变量,因为我使用的是layui自带的,所以导致我获取不到 input=checked 这个复选框的值,也就是是否勾选,所以我在js中定义了一个变量,并同时监听复选框的点击

 var isOk = true;//是否记住账号密码(true:记住,false:不记住)

 //监听复选框
 form.on('checkbox(filter)', function (data) {
      isOk = data.elem.checked;
  });


//监听提交  登录
form.on('submit(formDemo)', function (data) {
//因为是否勾选字段没有加进来,所以需要手动添加
data.field = {
    identity: data.field.identity,
    password: data.field.password,
    userAccount: data.field.userAccount,
    isOk: isOk
};

$.post("${ctx}/login/doLogin", data.field, function (jsonData) {
    if (jsonData.state) {
        window.location.replace("${ctx}/home");//跳转主页面
    } else {
        layer.alert(jsonData.msg, {icon: 5});
    }
});

return false;
});

分割线===========================。====

然后到了Controller(也就是Servlet)层,在登录验证的方法中就需要使用cookie了

  //创建一个cookie
  Cookie cookie = new Cookie("cookie_user",userAccount + "-" + password);
  if(isOk){   //判断是否勾选记住 账号密码
        //已勾选
        //设置过期时间为七天后  单位为:分钟
        cookie.setMaxAge(60*60*24*7);
        //将cookie通过response返回告诉浏览器处理cookie
        response.addCookie(cookie);
    }else {
        //未勾选 删除user的cookie(其实就是将存储时间设置为0)
        cookie.setMaxAge(0); //设置cookie过期时间为0
        response.addCookie(cookie);
    }

然后在Controller中再额外写一个从cookiezz中获取账号和密码的方法

@RequestMapping("/backfill")
@ResponseBody
public JsonMsg backfill(HttpServletRequest request) {
    JsonMsg jsonMsg = new JsonMsg();//这个实体类是用来返回json数据格式的
    Cookie[] cookie =  request.getCookies();

    //这里的数据有可能为null(也就是未勾选),所以不判断
    jsonMsg.setData(cookie);

    return jsonMsg;
}

JSON实体类中代码

package com.gx.vo;

import java.io.Serializable;

/**
 * 返回消息类
 * 主要兼容layui的返回类型
 */
public class JsonMsg implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 5863100019332084445L;

	private Boolean state;//状态
	private int code;
	private String msg;//消息
	private Object data;

	public Boolean getState() {
		return state;
	}

	public void setState(Boolean state) {
		this.state = state;
	}

	public int getCode() {
		return code;
	}

	public void setCode(int code) {
		this.code = code;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}
}

最后在jsp将获取cookie方法的js代码写在页面加载事件中即可
请求后台方法,选择到账号和密码的文本框,进行数据回填即可。

//页面加载事件
$(function (){
	//获取cookie中的账号和密码
	$.post('${ctx}/login/backfill', function (jsonData) {
	     for (var x in jsonData.data) {
	         if (jsonData.data[x].name == "cookie_user") {
	             var value = jsonData.data[x].value;//获取数据
	
	             //按理来说分割之前需要判断是否有数据,但可能没有勾选记住,所以数据有可能为空,直接回填即可
	             var arr = value.split("-");//分割字符
	             //自动回填数据
	             $('input[name="userAccount"]').val(arr[0]);    //账号
	             $('input[name="password"]').val(arr[1]);    //密码
	         }
	     }
	 });     
})

ps

因为我的表达能力,可能大家看的不是很懂,但其实核心代码就那么几句,也就是在后台关于cookie的使用,所以大家按照自己需要对应观看,或者有耐心的慢慢看也是可以的。如有不对,请各位多多指教。

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eric-x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值