Web基础之Cookie对象与Session对象(一)


Web基础之Cookie对象与Session对象(一)

一、Cookie对象和Session对象简介:
浏览器请求服务端是一种无状态链接,即每一次请求都是独立的;
Cookie和Session是保持会话的两种技术;
Cookie:客户端会话保持技术
Session:服务端会话保持技术

二、Cookie对象详解

1. Cookie中的数据,如何传递到客户端?
答:服务器端创建的Cookie,会通过响应头 Set-Cookie,传递给客户端。
2. Cookie何时失效?
答:Cookie 有一个maxAge属性,该属性指定该Cookie的有效期,时间单位是秒。maxAge默认是 -1,·
表示关闭浏览器即失效。
3. Cookie中的数据,又是如何被带到服务器?
答:如果同一个会话中,以前的某一次请求,服务器给客户端响应了Cookie,那么,该客户端后续对同一个
WEB APP 的请求都会带上该Cookie的数据。具体来说,是通过请求头Cookie来实现的。
通过 Cookie 的 domain 和 path 属性确定当前请求是否需要带上这个Cookie。










三、Cookie实例:七天内记住我(用户名)功能实现

loginandrmb.jsp页面
<%@age import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@ 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>
</head>
<body>
	<!--   Java代码区:获取所有的响应头的Cookie,看其中是否有名为myuser的Cookie,
	如果有,则获取Cookie中保存的用户名-->
	<%
		String userName=null;
		Cookie[] cookies =request.getCookies();
		if(cookies!=null  && cookies.length>0){
			for(Cookie cookie:cookies){
		if(cookie.getName().equals("myuser")){
			userName=cookie.getValue();
		}
			}
		}
	%>
	<form action="http://localhost:8080/MyCookieAndSession/login"
		method="POST">
		<!-- 把Cookie中保存的用户名设置上去-->
		用户名:<input type="text" name="userName"
			value="<%=userName==null?"":userName%>"><br />
		密  码:<input type="password" name="passWord"><br />
		
		<!-- 默认选中-->
		<input type="checkbox" name="rmbme" value="yes"
			<%=userName==null?"":"checked"%>>七天内记住我<br> <input
			type="submit" value="登录">
	</form>
</body>
</html>

LoginServlet逻辑处理

package com.usc.servlet;

import java.io.IOException;

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

public class LoginServlet extends HttpServlet{
	
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doPost(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		//设置请求编码
		req.setCharacterEncoding("UTF-8");
		//获取参数
		String userName =req.getParameter("userName");
		String passWord =req.getParameter("passWord");
		String rmbme=req.getParameter("rmbme");
		//简单的登录校验
		if("BlueSky".equals(userName) && "123".equals(passWord)){
			//创建Cookie
			Cookie cook =new Cookie("myuser", userName);
			//判断是否勾选七天内记住我
			if(rmbme!=null){
				//如果勾选了,则设置有限期为7天
				cook.setMaxAge(24*3600);
			}else{
				//否则设置达到浏览器立即失效
				cook.setMaxAge(0);
			}
			//保存用户名到REQUEST作用域
			req.setAttribute("userName", userName);
			//给客户端添加Cookie响应头
			resp.addCookie(cook);
			//转发请求
			req.getRequestDispatcher("/Loginwelcome.jsp").forward(req, resp);
		}else{
			//否则转到错误处理页
			resp.sendRedirect("/error.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>
</head>
<body>
欢迎您:<%=request.getAttribute("userName") %><br>
</form>
</body>
</html>

简单的错误处理页面
<%@ 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>
</head>
<body>
登录出现错误!
</form>
</body>
</html>

web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>MyCookieAndSession</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  <servlet-name>login</servlet-name>
  <servlet-class>com.usc.servlet.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>login</servlet-name>
  <url-pattern>/login</url-pattern>
  </servlet-mapping>
  
  </web-app>


四、运行效果:

第一次登录不选中七天内记住我



登录成功


新建一个会话,输入同样的地址,会发现并没有记住用户名,再次登录,并勾选七天内记住我




登录成功



再次新建会话:会发现用户名已经记住,并默认选中了七天内记住我




五、在Chrome浏览器中查看我们自己的Cookie信息









在搜索框中搜索local,这里可以查看本地的Cookie信息,创建时间以及过期时间,这里由于程序中设置的过期时间是
24*3600,忘记再*7天了,所以,变成了一天过期;





六、总结:
Cookie和Session是保持会话的两种技术,一种是客户端保持,一种是服务端保持;
Cookie技术主要是了解Cookie的基本原理,Cookie的创建,发送,获取以及Cookie的过期时间设置,路径设置等;
其实,在我们的生活中Cookie和Session的案例比比皆是,比如记住用户名,购物车等等;
学无止境!共勉!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值