0
点赞
收藏
分享

微信扫一扫

Day05JavaWeb【Cookie与Session】Cookie 看这篇就够了!***


学习目标

先讲Cookie再讲Session ?
Cookie和Session是基于会话的 Session基于Cookie技术
目标列表
1.能够说出会话的概念
2.能够说出cookie的概念
3.能够创建、发送、接收、删除cookie
4.能够说出cookie执行原理
5.能够说出session的概念
6.能够获取session对象、添加、删除、获取session中的数据

会话的介绍

  • (1)什么是会话
    浏览器和服务器之间发生的一系列请求和响应的过程
    会话开始: 打开浏览器-访问京东
    会话结束:关闭浏览器
  • (2)会话产生的数据
    在客户端与服务器端交互的过程中,也会产生一些数据。为了保存会话过程中产生的数据,在Servlet技术中,提供了两个用于保存会话数据的对象,分别是Cookie和Session
  • (3)本质就是在浏览器或者服务器存取数据的技术

Cookie的概述

  • (1)什么是Cookie
    Cookie技术就是在浏览器端存取会话的数据
  • (2)Cookie有什么特点?
    数据是key-value的形式 name=jack
    数据有存活时间,并且可以修改
    不能识别一些特殊符号,所以需要对这个符号进行转码

(1)Cookie的创建
Cookie(String name, String value) 创建cookie对象
String getName()获取cookie的名称
String getValue() 获取cookie的值
(2)将cookie发送给浏览器
void addCookie(Cookie cookie)

src\com\wzx\pack01_set_get\Demo01SetServlet.java

@WebServlet("/set")
public class Demo01SetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//数据是key-value的形式 age 18
//创建cookie对象
Cookie cookie1 = new Cookie("username","jack");
Cookie cookie2 = new Cookie("password","1234");

//因为cookie是浏览器保存会话数据的技术 ,所以必须将cookie发给浏览器
response.addCookie(cookie1);
response.addCookie(cookie2);
}
}

Cookie的获取

Cookie[] getCookies() 获取浏览器发送的cookie  
Cookie[] cookies = request.getCookies();

src\com\wzx\pack01_set_get\Demo02GetServlet.java

@WebServlet("/get")
public class Demo02GetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取cookie ,第二次开始访问网站,此时浏览器会自动地将保存的cookie放到请求带到Servlet
Cookie[] cookies = request.getCookies();
//循环所有的cookie
for(Cookie cookie:cookies){
System.out.println(cookie.getName()+" "+cookie.getValue());
}
}
}

Cookie设置存活时间

void setMaxAge(int expiry) 设置cookie的最大生存时间(单位:秒)
102460*60
(1)默认情况下,浏览器中Cookie的存活时间是一个会话
(2)我们有时候需要设置Cookie的 存活时间
如果你设置了setMaxAge,Cookie就会按存活时间保存在硬盘中
//设置Cookie的存活时间

cookie.setMaxAge(60*60);  //单位是秒,存活时间就是1个小时

src\com\wzx\pack02_life_time\Demo03SetServlet.java

@WebServlet("/set_time")
public class Demo03SetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//数据是key-value的形式 age 18
//创建cookie对象
Cookie cookie1 = new Cookie("username","jack");
cookie1.setMaxAge( 10*24*60*60);//修改cookie的存活时间
Cookie cookie2 = new Cookie("password","1234");
cookie2.setMaxAge( 10*24*60*60);
//因为cookie是浏览器保存会话数据的技术 ,所以必须将cookie发给浏览器
response.addCookie(cookie1);
response.addCookie(cookie2);
}
}

Cookie的访问路径

(1)  void setPath(String uri)  
设置cookie的路径——浏览器根据这个路径判断那些cookie要发送给服务器
//方式1:/myweb/ 当访问项目下的所有资源,请求都会携带Cookie
//方式2:/myweb/abc 当访问项目下的abc下所有资源,请求都会携带Cookie
//方式3:/ 当访问服务器中所有资源,请求都会携带Cookie
//默认方式:/myweb/ 当访问项目下的所有资源,请求都会携带Cookie

Day05JavaWeb【Cookie与Session】Cookie 看这篇就够了!***_服务器


src\com\wzx\pack03_setpath\Demo04SetServlet.java

@WebServlet("/set_path")
public class Demo04SetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//数据是key-value的形式 age 18
//创建cookie对象
Cookie cookie1 = new Cookie("username2","jack");
cookie1.setMaxAge( 10*24*60*60);//修改cookie的存活时间
Cookie cookie2 = new Cookie("password2","1234");
cookie2.setMaxAge( 10*24*60*60);

cookie1.setPath("/taobao");
cookie2.setPath("/taobao");

//因为cookie是浏览器保存会话数据的技术 ,所以必须将cookie发给浏览器
response.addCookie(cookie1);
response.addCookie(cookie2);
}
}

清除Cookie

  • (1)没有清除Cookie的方法
  • (2)可以修改存活时间
  • (3)可以使用空值覆盖原值
    1.cookie的生存时间单位为:0秒​​​cookie1.setMaxAge(0);​​ 2.要删除已经存在的cookie,后一个用来覆盖cookie必须名称与路径与原来的cookie一致

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

Cookie cookie1 = new Cookie("username","");
Cookie cookie2 = new Cookie("password","");

cookie1.setMaxAge(1000);
cookie2.setMaxAge(1000);
//因为cookie是浏览器保存会话数据的技术 ,所以必须将cookie发给浏览器
response.addCookie(cookie1);
response.addCookie(cookie2);
}

Cookie的编码

(1)Cookie不能识别一些特殊符号,所以需要对这个符号进行转码:
编码: URLEncoder.encode(date, "UTF-8")
解码: URLDecoder.decode(date, "UTF-8")
(2)

public class TestURLEncoder {
//网络编码,post使用的也是这个编码
@Test
public void test() throws UnsupportedEncodingException {
//中文
//明文 密文
String result = URLEncoder.encode("中国","utf-8");//编码 参1 明文 参2 utf-8
System.out.println(result);
//key name value %E4%B8%AD%E5%9B%BD

//密文 明文
String result2= URLDecoder.decode("%E4%B8%AD%E5%9B%BD","utf-8");//解码 参1 密文 参2 utf-8
System.out.println(result2);
}
}

src\com\wzx\pack05_encoding\Demo09GetServlet.java

@WebServlet("/get_decode")
public class Demo09GetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

Cookie[] cookies = request.getCookies();//
if(cookies != null){
//循环所有的cookie
for(Cookie cookie:cookies){
System.out.println(cookie.getName()+" "+ URLDecoder.decode(cookie.getValue(),"utf-8"));
}
}else{
System.out.println("没有查询到cookie");
}


}
}

Cookie的执行流程***

  • (1)浏览器第一次访问Servlet,创建一个Cookie对象
  • (2)Servlet将生成的Cookie发送到浏览器(Set-Cookie)
  • (3)浏览器自动保存
  • (4)第二次访问Servlet,浏览器自动将Cookie数据获取(“Cookie”) 再放在请求中
  • Day05JavaWeb【Cookie与Session】Cookie 看这篇就够了!***_session_02


举报

相关推荐

0 条评论