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。

Web基础之Cookie对象与Session对象(一)_第1张图片


Web基础之Cookie对象与Session对象(一)_第2张图片

Web基础之Cookie对象与Session对象(一)_第3张图片

Web基础之Cookie对象与Session对象(一)_第4张图片

Web基础之Cookie对象与Session对象(一)_第5张图片

Web基础之Cookie对象与Session对象(一)_第6张图片

Web基础之Cookie对象与Session对象(一)_第7张图片


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

loginandrmb.jsp页面
<%@age import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>




登录界面


	
	<%
		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();
		}
			}
		}
	%>
	
用户名:">
密  码:
>七天内记住我

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"%>




欢迎界面


欢迎您:<%=request.getAttribute("userName") %>

简单的错误处理页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




错误处理界面


登录出现错误!



web.xml配置文件



  MyCookieAndSession
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
  
  
  login
  com.usc.servlet.LoginServlet
  
  
  login
  /login
  
  
  


四、运行效果:

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

Web基础之Cookie对象与Session对象(一)_第8张图片

登录成功
Web基础之Cookie对象与Session对象(一)_第9张图片

新建一个会话,输入同样的地址,会发现并没有记住用户名,再次登录,并勾选七天内记住我
Web基础之Cookie对象与Session对象(一)_第10张图片

Web基础之Cookie对象与Session对象(一)_第11张图片

登录成功

Web基础之Cookie对象与Session对象(一)_第12张图片

再次新建会话:会发现用户名已经记住,并默认选中了七天内记住我
Web基础之Cookie对象与Session对象(一)_第13张图片



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

Web基础之Cookie对象与Session对象(一)_第14张图片

Web基础之Cookie对象与Session对象(一)_第15张图片

Web基础之Cookie对象与Session对象(一)_第16张图片

Web基础之Cookie对象与Session对象(一)_第17张图片

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

Web基础之Cookie对象与Session对象(一)_第18张图片



六、总结:
Cookie和Session是保持会话的两种技术,一种是客户端保持,一种是服务端保持;
Cookie技术主要是了解Cookie的基本原理,Cookie的创建,发送,获取以及Cookie的过期时间设置,路径设置等;
其实,在我们的生活中Cookie和Session的案例比比皆是,比如记住用户名,购物车等等;
学无止境!共勉!

你可能感兴趣的:(web基础)