会话技术Cookie

会话技术

从打开一个浏览器访问某个站点开始,到关闭浏览器的整个过程,称为一次会话。

会话技术的分类:

Cookie:数据保存到客户端本地,减轻服务器的压力,不安全,客户端可以管理(可以清除)。Cookie还有数量和大小的限定

Session:数据保存到服务器,安全性较好,增加服务器的压力,Session没有大小和数量的限定

Cookie

一:服务器获取Cookie的信息

		//从服务器获取客户端的cookie值
		Cookie[] cookies = request.getCookies();
		for (Cookie cookie : cookies) {
		System.out.println(cookie.getName());//获取Cookie的name值
		System.out.println(cookie.getValue());//获取Cookie的value值
	}

二:服务器发送一个Cookie到客户端

	// 1.创建cookie对象
	Cookie cookie = new Cookie("name", "wym");
	// 2.设置有效时间 单位s
	cookie.setMaxAge(60);
	// 3.设置有效路径
	cookie.setPath("/web_cookie");//访问某个站点
	cookie.setPath("/web_cookie/CookieServlet");//访问站点下的某个资源
	cookie.setPath("/");//访问服务器下的所有请求都会携带
	// 4.发送给客户端
	response.addCookie(cookie);

5.删除cookie 实际上就是覆盖 将时间设置为0

	Cookie cookie2 = new Cookie("name", "wsw");
	cookie2.setMaxAge(0);
	cookie2.setPath("/web_cookie/CookieServlet");
	response.addCookie(cookie2);

三:记录上次访问时间

	//解决响应给客户端的中文乱码
	response.setContentType("text/html;charset=UTF-8");

	//创建当前访问时间
	Date date = new Date();
	SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	String format = simpleDateFormat.format(date);

	// 写入上次登录的时间
	Cookie cookie = new Cookie("lastTime", format);
	cookie.setMaxAge(60 * 3);// 单位秒
	response.addCookie(cookie);

	String lastTime = null;
	//目的为了获取获取lastTime的cookie值
	Cookie[] cookies = request.getCookies();
	if (cookies != null) {
		for (Cookie cookie2 : cookies) {
			if ("lastTime".equals(cookie2.getName())) {
				lastTime = cookie2.getValue();
			}
		}
	}

	if (lastTime == null) {
		response.getWriter().write("欢迎第一次访问");
	} else {
		response.getWriter().write("您上次的访问时间是" + lastTime);
	}

四:实现免登录

1.前台创建一个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>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>登录</title>
<%
String username = null;
String password = null;

Cookie[] cookies = request.getCookies();
if (cookies != null) {
	for (Cookie cookie : cookies) {
		if ("username".equals(cookie.getName())) {
			username = cookie.getValue();
		} else if ("password".equals(cookie.getName())) {
			password = cookie.getValue();
		}
	}
}
if (username != null && password != null) {
	request.getRequestDispatcher("/noPasswordCookieServlet?username=" + username+ "&password=" + password).forward(request,response);
}
%>
</head>
<body>
<form action="/web_cookie/noPasswordCookieServlet" method="post">
	用户名:<input type="text" name="username" /><br /> 
	密码:<input type="password" name="password" /><br />
	<select name="rememberday">
		<option value="0">不记住密码</option>
		<option value="7">7天</option>
		<option value="30">30天</option>
	</select><br />
	<input type="submit" />
</form>
<%
	if (request.getAttribute("error") != null) {
%>
<%=request.getAttribute("error")%>
<%
	}
%>
</body>
</html>

2.Servlet代码块

	// 实现免登录
	// post请求乱码解决
	request.setCharacterEncoding("utf-8");
	// 获得请求的参数
	String username = request.getParameter("username");
	String password = request.getParameter("password");

		// 验证是否登录成功,账户与密码写死了,没走数据库
		if ("wym".equals(username) && "123".equals(password)) {
			// 是否需要免登录
			String rememberday = request.getParameter("rememberday");
			// 如果时免登录过来的,没有remember长度
			if (rememberday != null) {
				// 免登录的天数
				int day = Integer.parseInt(rememberday);
				if (day != 0) {
					// 将创建的cookie的对象发送给客户端
					Cookie cookie1 = new Cookie("username", username);
					Cookie cookie2 = new Cookie("password", password);
					cookie1.setMaxAge(60 * 60 * 24 * day);
					cookie2.setMaxAge(60 * 60 * 24 * day);
					response.addCookie(cookie1);
					response.addCookie(cookie2);
				}
			}
			response.sendRedirect("/web_cookie/success.html");
		} else {
			request.setAttribute("error", "用户名或者密码错误");
			// 请求转发
			request.getRequestDispatcher("/login.jsp").forward(request,
					response);
		}

五:记住密码

1.前台创建一个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>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<%
String username = null;
String password = null;
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for (Cookie cookie : cookies) {
	if ("username".equals(cookie.getName())) {
		username = cookie.getValue();
	} else if ("password".equals(cookie.getName())) {
		password = cookie.getValue();
	}
}
}
%>

</head>
<body>
<form action="/web_cookie/rememberPasswordCookie" method="post">
	用户<input type="text" name="username" <%if (username != null) {%> value=<%=username%> <%}%> /><br> 
	密码<input type="password" name="password" <%if (password != null) {%> value=<%=password%> <%}%> />		<br> 
	记住密码<input type="checkbox" name="checkbox" <%if(username !=null){ %> checked<%} %> value="ok" />
	<input type="submit" /> 
</form>

<%
	if (request.getAttribute("error") != null) {
%>
<%=request.getAttribute("error")%>
<%
	}
%>
</body>
</html>

2.Servlet代码块

	// 获得请求的参数
	String username = request.getParameter("username");
	String password = request.getParameter("password");
	
	//账户与密码写死了,没走数据库
	if ("wsw".equals(username) && "123".equals(password)) {
		String flag = request.getParameter("checkbox");
		if ("ok".equals(flag)) {
			Cookie cookie1 = new Cookie("username", username);
			Cookie cookie2 = new Cookie("password", password);
			cookie1.setMaxAge(60 * 60 * 24 * 7);
			cookie2.setMaxAge(60 * 60 * 24 * 7);
			response.addCookie(cookie1);
			response.addCookie(cookie2);
		} else {
			Cookie cookie1 = new Cookie("username", username);
			Cookie cookie2 = new Cookie("password", password);
			cookie1.setMaxAge(0);
			cookie2.setMaxAge(0);
			response.addCookie(cookie1);
			response.addCookie(cookie2);
		}
		response.sendRedirect("/web_cookie/success.html");
	} else {
		request.setAttribute("error", "用户名或密码错误");
		request.getRequestDispatcher("/login02.jsp").forward(request,
				response);
	}

六:Cookie 和 浏览器的缓存的区别

共同点: 都是在本地

不同点:缓存可以放任意数据 cookie 只是服务器发送给客户端的某些数据 (cookie是缓存的一部分)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值