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"%>
登录界面
<%
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
四、运行效果:
第一次登录不选中七天内记住我
登录成功
新建一个会话,输入同样的地址,会发现并没有记住用户名,再次登录,并勾选七天内记住我
登录成功
再次新建会话:会发现用户名已经记住,并默认选中了七天内记住我
五、在Chrome浏览器中查看我们自己的Cookie信息
在搜索框中搜索local,这里可以查看本地的Cookie信息,创建时间以及过期时间,这里由于程序中设置的过期时间是
24*3600,忘记再*7天了,所以,变成了一天过期;
六、总结:
Cookie和Session是保持会话的两种技术,一种是客户端保持,一种是服务端保持;
Cookie技术主要是了解Cookie的基本原理,Cookie的创建,发送,获取以及Cookie的过期时间设置,路径设置等;
其实,在我们的生活中Cookie和Session的案例比比皆是,比如记住用户名,购物车等等;
学无止境!共勉!