【JavaWeb】-Cookie的使用,看完这个别说你不会Cookie了(四)

24 篇文章 6 订阅

Cookie

前言

因为cookie、session、token本身就是很容易混淆的东西,这里不放在一块了,所以我们先来理解下cookie是什么,怎么去简单的使用下, 看前点个赞,养成好习惯;👍

书接上回:
【JavaWeb】-Tomcat、Eclipse使用项目搭建(一)
【JavaWeb】-mysql、jdbc、dbcp使用(二)
【JavaWeb】-MVC、Servlet学习(三)

介绍

cookie是啥,来自百度百科:

在这里插入图片描述

我觉得多少都了解cookie吧,因为是不是有时候好网站都在拦截Cookie或者我们见过Cookie,在哪里呢?

打开浏览器,右键点击检查,这里存放了很多Cookie,Cookie就是与服务器沟通时候的自己带的一些信息,其实就是用户名和密码,我们判断用户是否登录,以及用户登录网站留下的信息。

这些相信大家都知道,我们通常第一次登录网站需要输入账号密码,那第二次登陆的时候就都会留下我们第一次的信息,那下面我们要说的三个东西都是实现这项功能的技术,那么我们顺其往下,我们先来学习Cookie;

在这里插入图片描述

环境准备

那这次我们做一下环境准备:大家平常都在哪里白嫖这种网页模板呀,博主反正找到的都不好看,如果有请在博主评论区里艾特我一下,在线卑微! 找一个好看的登录模板;

这里我们使用就是保存用户登录账号和名称做演示:

我们首先设置下过滤编码创建一个filter过滤全部编码为utf-8:

package filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

/**
 * Servlet Filter implementation class CharasetFilter
 */
@WebFilter("/*")
public class CharasetFilter implements Filter {

	/**
	 * Default constructor.
	 */
	public CharasetFilter() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		System.out.println("经过过滤");
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

我们创建一个MyLoginServlet.java:

package servlet;

import java.io.IOException;
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;

/**
 * Servlet implementation class MyLoginServlet
 */
@WebServlet("/MyLoginServlet")
public class MyLoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public MyLoginServlet() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//String name = ;
		String pass = request.getParameter("password");
		
		Cookie name = new Cookie("name", URLEncoder.encode(request.getParameter("username"), "UTF-8"));
		Cookie passCookie = new Cookie("pass", pass);
		
		//设置时间24小时
		name.setMaxAge(60*60*24);
		passCookie.setMaxAge(60*60*24);
		
		response.addCookie(name);
		response.addCookie(passCookie);
		
		response.sendRedirect("index.jsp");
		//request.getRequestDispatcher("ToIndexServlet").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

我们的index.jsp页面,发现了没有我们的jsp页面可以写java代码,后面我们细说jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>主界面</title>
</head>
<body>

	<%
		Cookie[] cookies = request.getCookies();

		if (cookies != null) {
			// 我们可以遍历下我们的cooike看看
			for (Cookie cookie : cookies) {
				out.println(cookie.getName() + "<br/>");
				out.println(cookie.getValue() + "<br/>");
				out.println("==============<br/>");
			}
		}
	%>

	这里是主界面
</body>
</html>

这里我们不跟数据库打交道,随便的登录信息即可,登录页面登录:

在这里插入图片描述

通过开发者模式,我们查看网络请求,我们看到了服务器给我们的响应请求设置了cookie:

在这里插入图片描述

登录进入index.jsp页面,我们发现我们所有携带的cookie就都在这里了:

在这里插入图片描述

当我们关闭浏览器再次进入,我们发现我们的信息还在,因为上面我们设置了cookie有效时间为24小时,所以我们退出之后登录信息依然存在,这样通过cookie保存信息我们就完成了:

在这里插入图片描述

这里我们也同样可以根据浏览器开发者看到cookie信息:
在这里插入图片描述

这里发现我们cookie除了设置时间,还可以设置很多信息(来自菜鸟教程):

Servlet Cookie 方法

以下是在 Servlet 中操作 Cookie 时可使用的有用的方法列表。

序号方法 & 描述
1public void setDomain(String pattern) 该方法设置 cookie 适用的域,例如 runoob.com。
2public String getDomain() 该方法获取 cookie 适用的域,例如 runoob.com。
3public void setMaxAge(int expiry) 该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。
4public int getMaxAge() 该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。
5public String getName() 该方法返回 cookie 的名称。名称在创建后不能改变。
6public void setValue(String newValue) 该方法设置与 cookie 关联的值。
7public String getValue() 该方法获取与 cookie 关联的值。
8public void setPath(String uri) 该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。
9public String getPath() 该方法获取 cookie 适用的路径。
10public void setSecure(boolean flag) 该方法设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。
11public void setComment(String purpose) 设置cookie的注释。该注释在浏览器向用户呈现 cookie 时非常有用。
12public String getComment() 获取 cookie 的注释,如果 cookie 没有注释则返回 null。

我们也可以手动删除cookie信息:

在这里插入图片描述

这样我们的name就没有了:

在这里插入图片描述

那这里就是cookie的使用,我们发现cookie是不是有点儿不安全,可以看到账号和密码,如果这些信息被别人一下看到,或者拦截一下,那不就太明文了,对吧,通过cookie我们是将我们的存储信息交给了客户端,那我们如果交给服务端去做呢?,下面就到了session了,我们看看什么是session;

那老规矩都看到这里了,还不点个关注,那后面更新了又找不到了,预留:{session}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习日记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值