개념의 1.Cookie
세션 1. 개념
일상 생활에서 전화 통화에서 당신이 날 그 하나의 세션 답변을 요청 물론 일련의 사이에 전화를 걸 수 있습니다.
세션 웹 응용 프로그램은 연속 클라이언트 (브라우저)와 웹 서버 사이에 발생하는 일련의를 의미, 과정이라는 삶과 유사 요청 및 응답 웹 사이트에, 예를 들어, 공정 사용자를 전체 쇼핑 과정은 대화이다.
전화에서 양측은 클라이언트와 서버의 상호 작용의 과정에서 또한 대화를 이야기합니다, 일부 데이터를 생성 할 수 있습니다. 세션 동안 생성 된 데이터를 저장하기 위해 서블릿 기술, 두 데이터, 즉 쿠키 및 세션에 대한 세션 개체를.
개념의 2.Cookie
쿠키는 브라우저 측이다 세션 기술 . 그는입니다 서버를 생성 하고, 고객의 브라우저, 브라우저에 저장된 정보의 소량을 보낼 수 있습니다.
때 서버에 브라우저 액세스 다시 이전의 쿠키 정보를 전달합니다. (쿠키 정보를 저장), 서버는 쿠키, 당신은 어떤 브라우저 액세스를 알게됩니다 얻는다. (고객에게 특정)
4K와 같은 데이터 저장 쿠키 최대, 당신은 300 개 이상의 쿠키 일반 브라우저, 각 사이트 Xiacun 약 20 쿠키를 저장할 수 있습니다.
데이터가 로컬 스토리지에 저장 될 수있는 웹 프로젝트 : 3. 질문을 숙고?
- 요청 도메인
- ServletContext에 도메인 (웹 전체 프로젝트를 공유)
- MySQL과 데이터베이스에 저장된 다른 데이터 (사용자가 로그인되어있는 경우, 당신은 도서관에 보관해야하며, 사용자가 기록되지 않습니다)
- 그래서 IO 스토리지를 사용하여 TXT 파일 ...
왜에 저장되어있는 ServletContext를 요청하고 데이터를 사용하지?
질문 : 더 적절한 장바구니에 추가 데이터를 저장?
기술 세션 : 쿠키 브라우저 세션 및 세션 서버 기술에 대한 기술 세션.
2.Cookie의 원칙의 구현 (초점)
3.Cookie的API(重点)
1.问题1: Cookie如何创建 (Cookie理解为一个Map<String,String>)
Cookie(String name, String value) 服务器中创建Cookie
2.问题2:Cookie中可以存放什么数据?
只能存储字符串.并且是以键值对的方式存储.(类似于Properties集合)
3.问题3:Cookie如何发送到浏览器?
HttpServletResponse类中方法:
void addCookie(Cookie cookie) 把cookie添加到response中,响应的时候就将cookie带到了浏览器上
4.问题4:Cookie保存在浏览器的哪个位置?
5.问题5:服务器中如何获取Cookie?
HttpServletRequest类中有获取cookie的方法
Cookie[] getCookies() request对象一次可以获取到所有的cookie信息.
6.Cookie对象的其他方法:
String getName() 获取cookie的key值
String getValue() 获取cookie的value值
void setMaxAge(int expiry) 设置cookie在浏览器的最大保存时间 单位是秒
void setPath(String uri) 设置路径,在哪个请求路径下会携带cookie.
setPath(“路径”),Path不一样的情况下,Cookie是可以重复的。当Path一样的情况下,Key值一样的,value就会被覆盖。
注意事项
- cookie的生存时间单位为:秒
- 要删除已经存在的cookie,后一个用来覆盖cookie必须名称与路径与原来的cookie一致
4.Cookie的入门案例
目标: 查看cookie的执行流程 (第一次请求没有,第一次响应服务器创建了cookie,浏览器保存cookie,第二次请求携带cookie,在服务器中可以获取到cookie信息)
需求: 创建一个Servlet,中创建一个Cookie,cookie保存信息name=tom , 当用户第二次访问的时候,将携带的cookie打印出来.
代码实现:
package com.ccc.cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 目标: 创建Cookie携带到浏览器 ,第二次请求该Servlet,获取cookie信息,打印里面的内容
*
* 观察流程: 1.第一次请求中不会携带cookie
* 2.第一次响应,响应头中会把cookie携带到浏览器 查看响应头 查看浏览器的cookie
* 3.第二次请求, 请求头中是否有cookie? 会!
* 4.看控制台是否打印cookie的value值
*/
//@WebServlet(urlPatterns = "/Demo1_Cookie")
//@WebServlet(value = "/Demo1_Cookie")
@WebServlet("/Demo1_Cookie")
public class Demo1_Cookie extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 步骤
* 1.设置编码
* 2.创建Cookie Cookie(String String)
* 3.给response中 addCookie(Cookie)
*
* 用户第二次访问:
* 4.获取cookie request.getCookies(); Cookie[]
* 5.遍历循环cookie[] 通过ke值找到我们自己设置的cookie getName() 获取key
* 6.通过cookie对象的getValue() 获取具体的值并打印.
*/
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
Cookie cookie = new Cookie("name","jack");
response.addCookie(cookie);
//获取cookie
Cookie[] cookies = request.getCookies(); //如果用户第一次过来,没有对象是null
if(cookies !=null && cookies.length >0){
for (Cookie c : cookies) {
//如果cookie的key值为name , 找到了我们自己设置的cookie对象
if("name".equals(c.getName())){
String value = c.getValue();
System.out.println(value);
}
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
5.Cookie默认在浏览器上的存储时间是多久?
浏览器默认保存会话的时间当会话结束,cookie就销毁 (浏览器只要关闭,cookie就消失).
观察完京东,每次添加完购物车之后,即便是关闭浏览器,再次打开,cookie有效,购物车中的数据也有效。为什么会这样呢?因为京东对cookie的保存时间进行了设置.
需求: 将浏览器的cookie信息保存一个礼拜
/**
* 目标: 设置cookie在浏览器的最大保存时间为7天
* Cookie对象的方法setMaxAge()
*/
@WebServlet("/Demo2_Cookie")
public class Demo2_Cookie extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
Cookie cookie = new Cookie("name","jack");
//设置cookie的最大保存时间 单位是秒
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
//获取cookie
Cookie[] cookies = request.getCookies(); //如果用户第一次过来,没有对象是null
if(cookies !=null && cookies.length >0){
for (Cookie c : cookies) {
//如果cookie的key值为name , 找到了我们自己设置的cookie对象
if("name".equals(c.getName())){
String value = c.getValue();
System.out.println(value);
}
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
6.设置请求携带cookie的路径
void setPath(String uri) 设置路径,在哪个请求路径下会携带cookie
模拟:项目day13 创建cookie设置cookie信息,第二次请求的时候只要访问路径:localhost:8080/day13/Demo1Servlet ,就可以携带cookie
项目day14创建cookie设置cookie信息,第二次请求的时候只要访问路径:localhost:8080/day14/Demo1Servlet ,就可以携带cookie
同一个项目如果设置了setPath, 那么在浏览器每次请求的时候,cookie只携带自己项目下的cookie,不会携带别的cookie.
案例演示: day13如果设置了setPath("/day13") ,那么浏览器请求他的时候只携带自己cookie,day14如果这时也设置了path,那么它每次也携带自己的path
Day13项目的
package com.ccc.cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 目标: 设置cookie在浏览器的最大保存时间为7天
* Cookie对象的方法setMaxAge()
*/
@WebServlet("/Demo3_Cookie")
public class Demo3_Cookie extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
Cookie cookie = new Cookie("name","jack");
//设置cookie的最大保存时间 单位是秒
cookie.setMaxAge(60*60*24*7);
//设置path 请求路径中包含path 就会携带cookie
cookie.setPath("/day13");
response.addCookie(cookie);
//获取cookie
Cookie[] cookies = request.getCookies(); //如果用户第一次过来,没有对象是null
if(cookies !=null && cookies.length >0){
for (Cookie c : cookies) {
//如果cookie的key值为name , 找到了我们自己设置的cookie对象
if("name".equals(c.getName())){
String value = c.getValue();
System.out.println(value);
}
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
Day14项目的
package com.ccc.cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 目标: 设置cookie在浏览器的最大保存时间为7天
* Cookie对象的方法setMaxAge()
*
*/
@WebServlet("/Demo3_Cookie")
public class Demo3_Cookie extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
Cookie cookie = new Cookie("name","rose");
//设置cookie的最大保存时间 单位是秒
cookie.setMaxAge(60*60*24*7);
cookie.setPath("/day14");
response.addCookie(cookie);
//获取cookie
Cookie[] cookies = request.getCookies(); //如果用户第一次过来,没有对象是null
if(cookies !=null && cookies.length >0){
for (Cookie c : cookies) {
//如果cookie的key值为name , 找到了我们自己设置的cookie对象
if("name".equals(c.getName())){
String value = c.getValue();
System.out.println(value);
}
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
7.Cookie 能够在程序中销毁(本质是被覆盖了)
实现步骤:
1.创建一个名称(key)一样的cookie,value值可以任意,建议使用空字符串
2.设置新创建的cookie的最大有效时间为0
3.设置新创建的cookie的path为本项目的
4.将新创建的cookie添加到response中,发送给浏览器(浏览器会自动的销毁)
需求:
目标是删除day14路径下的cookie (name=rose)的该cookie.
代码实现
/**
需求:
目标是删除day14路径下的cookie (name=rose)的该cookie.
*/
@WebServlet("/Demo4_DeleteCookie")
public class Demo4_DeleteCookie extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
实现步骤:
1.创建一个名称(key)一样的cookie,value值可以任意,建议使用空字符串
2.设置新创建的cookie的最大有效时间为0
3.设置新创建的cookie的path为本项目的
4.将新创建的cookie添加到response中,发送给浏览器(浏览器会自动的销毁)
*/
Cookie cookie = new Cookie("name","");
cookie.setMaxAge(0);
cookie.setPath("/day14");
response.addCookie(cookie);
System.out.println("day14的cookie的name为rose的cookie已经删除完毕");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
8.案例- 记录上一次访问的时间 (重点)
요구 사항 :. 사용자가 처음 방문 CookieServlet 인 경우, 브라우저가 당신의 마지막 방문이 XXXX에 있던 인쇄 제공, 사용자가 첫 번째 방문이 아닌 경우 브라우저가 처음 방문 인쇄
주소 : HTTPS : / /blog.csdn.net/qq_45083975/article/details/92965972