一、cookie
(一)cookie的创建和发送(二)cookie的获取(三)cookie的到期时间
1. 到期时间的表示2. 代码演示 (四)cookie中文乱码问题、以及如何重新设置
1. 说明2. 代码演示 (五)指定路径获取cookie
1. 说明2. 代码演示 二、Session
(一)session对象的获取和访问
1. 说明2.代码演示 (二)session域对象的应用
1. 说明2. 代码演示 session对象的过期和销毁
1. 说明2. 代码演示 End
一、cookieHTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 cookie 的主要目的就是为了弥补 HTTP 的无状态特性。
cookie,有时也用其复数形式cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
(一)cookie的创建和发送 @Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//cookie的创建
cookie cookie = new cookie("name","admin");
//发送(响应) cookie对象
resp.addcookie(cookie);
}
(二)cookie的获取
将会返回一个cookie数组,供获取cookie数据
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取cookie数组
cookie[] cookies = req.getcookies();
//判断cookie是否为空
if(cookies != null && cookies.length>0){
//遍历cookie数组
for (cookie cookie : cookies){
//获取cookue的名称和值
String name = cookie.getName();
String value = cookie.getValue();
System.out.println("名称:"+name+" 值:"+value);
}
}
}
(三)cookie的到期时间
1. 到期时间的表示
2. 代码演示
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
cookie cookie = new cookie("uname1","zhangsan");
cookie.setMaxAge(-1); //关闭浏览器失效
resp.addcookie(cookie);
cookie cookie2 = new cookie("uname2","lisi");
cookie.setMaxAge(30); //存活30s
resp.addcookie(cookie2);
cookie cookie3 = new cookie("uname3","wangwu");
cookie.setMaxAge(0); //删除cookie
resp.addcookie(cookie3);
}
(四)cookie中文乱码问题、以及如何重新设置
1. 说明
2. 代码演示
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = "姓名";
String value = "张三";
//将中文通过URLEncoder进行编码
name = URLEncoder.encode(name);
value = URLEncoder.encode(value);
//创建cookie对象
cookie cookie = new cookie(name,value);
//响应cookie
resp.addcookie(cookie);
//获取cookie时,通过URLDecoder进行解码
cookie[] cookies = req.getcookies();
//判断非空
if(cookies != null&& cookies.length>0){
//遍历
for(cookie cook : cookies){
//解码
System.out.println(URLDecoder.decode(cook.getName()));
System.out.println(URLDecoder.decode(cook.getValue()));
}
}
//将原来已有的cookie对象重新设置
cookie cookie2 = new cookie("name","zhangsan");
resp.addcookie(cookie2);
}
(五)指定路径获取cookie
1. 说明
2. 代码演示
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
cookie cookie01 = new cookie("cookie01","cookie01");
//设置路径为“/”,表示在当前服务器下任何项目都可访问到cookie对象
cookie01.setPath("/");
resp.addcookie(cookie01);
cookie cookie02 = new cookie("cookie02","cookie02");
//默认不设置cookie的path 或者 设置为当前站点名
cookie01.setPath("/servlet");
resp.addcookie(cookie02);
cookie cookie03 = new cookie("cookie03","cookie03");
//设置为指定项目的站点名
cookie01.setPath("/指定站点名");
resp.addcookie(cookie03);
cookie cookie04 = new cookie("cookie04","cookie04");
//设置为指定项目的站点名
cookie01.setPath("/servlet/cookie04");
resp.addcookie(cookie04);
}
二、Session
在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。
(一)session对象的获取和访问 1. 说明2.代码演示
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取session对象
HttpSession session = req.getSession();
//获取session的会话标识符
String id = session.getId();
System.out.println(id);
//获取session的创建时间
System.out.println(session.getCreationTime());
//获取最后一次访问时间
System.out.println(session.getLastAccessedTime());
//判断是否是新的session对象
System.out.println(session.isNew());
}
(二)session域对象的应用
1. 说明
2. 代码演示
重定向时,session域依旧能够共享
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取session对象
HttpSession session = req.getSession();
//设置域对象
session.setAttribute("uname", "admin");
session.setAttribute("upwd", "123456");
//移除session域对象
session.removeAttribute("upwd");
req.setAttribute("name","zhangsan");
//请求转发跳转到jsp页面
//req.getRequestDispatcher("sessionTest.jsp").forward(req,resp);
//重定向跳转到jsp页面
resp.sendRedirect("sessionTest.jsp");
}
jsp页面获取session域对象
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
获取域对象
<%
//获取session域对象
String uname = (String) request.getSession().getAttribute("uname");
String upwd = (String) request.getSession().getAttribute("upwd");
//获取request域对象
String name = (String) request.getAttribute("name");
out.print("uname :"+ uname + ",upwd :"+ upwd +",name :" +name);
%>
session对象的过期和销毁
1. 说明
2. 代码演示
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取session对象
HttpSession session = req.getSession();
//设置域对象
session.setAttribute("uname", "admin");
//立即销毁
session.invalidate();
}
End
简单理解cookie和session和cookie就是一个字典,只是一个储存在服务器、一个存储在客户端。



