Java Web 通过操控Cookie实现记住密码
目录
什么是Cookie?
引用百度百科的说法,
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息
说白了就是将浏览器上面的一些信息保存在用户的电脑上面,当然了这些数据一般不会产生严重影响,因为它永远不会以任何方式执行,也就避免带来了病毒或者攻击用户电脑,并且一般浏览器都会对Cookie
的个数有限制,不用担心塞满用户电脑。
有什么用?
可以用来记录用户访问该网站的频率、时间段等,最常用的就是“记住用户名和密码”,在一些登陆网站,当用户登陆的时候选择了“记住密码”,Web
服务端就将用户名和密码进行处理(一般就是将密码进行加密),然后将处理后的字符串封装成一个Cookie
进行保存。
怎么用?
以Java Web
为例:
首先新建登陆页面:
<%--
Author: Yalexin
Email: 181303209@yzu.edu.cn
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
<%
String username = "", password = "";
Cookie[] cookies1 = request.getCookies();
if (cookies1 != null){
for (Cookie cookie : cookies1){
if (cookie.getName().equals("userCookie")){
String[] split = cookie.getValue().split("->");
username = split[0];
password = split[1];
}
}
}
%>
</head>
<body>
<form action="login_1" method="post">
<input type="text" name="username" value="<%=username%>">
<input type="password" name="password" value="<%=password%>">
<input type="submit" value="登陆">
</form>
</body>
</html>
创建Servlet
,处理post
请求:
/**
* Author: Yalexin
* Email: 181303209@yzu.edu.cn
**/
package com.yalexin;
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;
import java.io.IOException;
@WebServlet(urlPatterns = "/login_1", name = "Login_1Servlet")
public class Login_1Servlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username").trim();
String password = req.getParameter("password").trim();
saveCookie(resp, "userCookie", username + "->" + password, 60 * 60);
this.getServletContext().setAttribute("username", username);
resp.sendRedirect("index_1.jsp");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
private void saveCookie(HttpServletResponse response, String cookieName, String value, int time) {
Cookie cookie = new Cookie(cookieName, value);】
// 以秒为单位
cookie.setMaxAge(time);
response.addCookie(cookie);
}
}
创建登陆成功后的页面:
<%--
Author: Yalexin
Email: 181303209@yzu.edu.cn
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
hello ${username}
<a href="logout_1"> 注销 </a>
</body>
</html>
创建注销Servlet
/**
* Author: Yalexin
* Email: 181303209@yzu.edu.cn
**/
package com.yalexin;
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;
import java.io.IOException;
@WebServlet(urlPatterns = "/logout_1", name = "Logout_1Servlet")
public class Logout_1Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
deleteCookieByName(resp, req, "userCookie");
resp.sendRedirect("login_1.jsp");
}
/**
* 由于没有提供delete方法,可借助 cookie.setMaxAge(0) 将cookie的时间设置成0,即过期状态,间接达到删除目的
*
* @param response
* @param request
* @param cookieName
*/
private void deleteCookieByName(HttpServletResponse response, HttpServletRequest request, String cookieName) {
Cookie cookie = new Cookie(cookieName, "");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
本文由「黄阿信」创作,创作不易,请多支持。
如果您觉得本文写得不错,那就点一下「赞赏」请我喝杯咖啡~
商业转载请联系作者获得授权,非商业转载请附上原文出处及本链接。
关注公众号,获取最新动态!
历史评论
开始评论