会话技术cookie

一、会话技术

1.会话 
指的是浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
2.功能
在一次会话的范围的多次请求间,共享数据
3.方式
客户端会话技术:Cookie
服务端会话技术:Session

二、Cookie

1.概念

客户端会话技术,将数据保存到客户端

2.入门

步骤:
创建Cookie对象,绑定数据
new Cookie(String name,String value)
发送Cookie对象
response.addCookie(Cookie cookie)
获取Cookie,拿到数据
request.getCookie()
穿插设置默认新建Servlet的格式
点击file-setting,找到File and Code Templates,选择other选项下的WEB

找到Servlet Annotated Class.java
在右边默认格式中修改为如下:

这样一来,新建的servlet格式就不用手动修改路径,也不用加this.doPost().
@WebServlet("/CookieDemo1")
public class CookieDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1、创建Cookie对象
Cookie c = new Cookie("msg","hello");
// 2、发送Cookie
response.addCookie(c);//发送给浏览器

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

再新建一个servlet对象来获取cookie:

@WebServlet("/CookieDemo2")
public class CookieDemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cs = request.getCookies();
// 获取数据
if(cs!=null){
for(Cookie c : cs){
String name = c.getName();
String value = c.getValue();
System.out.println(name+ ":" +value);
}
}
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

测试结果:

先用Demo1发送

再访问Demo2

3.Cookie实现原理

原理图:

CookieDemo1根据客户端请求,给出响应,此响应返回给客户端,客户端将cookie内容保存在客户端,此时再一次发送请求,会话内容就被客户端带着访问CookieDemo2,然后服务器端给出响应。

它是基于响应头set-cookie和请求头cookie实现

抓包CookieDemo1 ,在响应头中发现了Set-Cookie:msg = hello

抓包CookieDemo2,此时信息在请求头中出现

4.Cookie的细节

回家:一次可以发送多个cookie吗?-----可以

可以创建多个cookie对象实现

@WebServlet("/CookieDemo1")
public class CookieDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1、创建Cookie对象
Cookie c1 = new Cookie("msg","hello");
Cookie c2 = new Cookie("name","Jerry");
// 2、发送Cookie
response.addCookie(c1);//发送给浏览器
response.addCookie(c2);

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

查看Set-Cookie,有两个

cookie在浏览器中保存多长时间?

回答:

默认情况下,浏览器关闭,内存释放,cookie文件销毁。

设置持久化存储

setMaxAge(int seconds)

传递正数:持久化存储,存活时间

负数:默认值(存在浏览器中,浏览器关闭后销毁)

0:删除cookie信息

@WebServlet("/CookieDemo1")
public class CookieDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1、创建Cookie对象
Cookie c1 = new Cookie("msg","hello");
// 2.设置cookie存活时间
c1.setMaxAge(30); // 将cookie持久化到硬盘,30秒后自动删除
// c1.setMaxAge(-1); 默认模式
// c1.setMaxAge(0); 删除
// 3、发送Cookie
response.addCookie(c1);//发送给浏览器


}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

cookie能不能存中文?

回答:tomcat8之后可以存中文

Cookie c1 = new Cookie("msg","你好");

cookie获取范围有多大,共享问题?

如果在tomcat有多个项目,在这些web项目中cookie能不能共享?

默认情况下不可以

但是可以设置:

setPath(String path):设置cookie的获取范围,默认情况下,设置当前虚拟目录

将setPath(String path) 里的path设为“/”就可以实现共享

在Demo1下:

@WebServlet("/CookieDemo1")
public class CookieDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1、创建Cookie对象
Cookie c1 = new Cookie("msg","你好");
c1.setPath("/");
// 2、发送Cookie
response.addCookie(c1);//发送给浏览器
}

 

新建,module

设置两个web项目

@WebServlet("/CookieDemo")
public class CookieDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取cookie
System.out.println("day06");
Cookie[] cs = request.getCookies();
// 获取数据
if(cs!=null){
for(Cookie c : cs){
String name = c.getName();
String value = c.getValue();
System.out.println(name+ ":" +value);
}
}
}

测试 :可以访问

不同的tomcat服务器间cookie共享问题?

setDomain(String path) :如果设置一级域名相同,那么多个服务器的cookie可以共享

比如:

setDomain(".baidu.com")。那么tieba.baidu.com和news.baidu.com中cookie共享

5.cookie的特点

特点:

cookie存储数据在客户端浏览器

浏览器对于单个cookie的大小有限制(4kb)以及 对同一域名下的中cookie数量有限制

作用:

cookie一般用于存储少量的不太敏感的数据

在不登录的情况下,完成服务器对客户端的身份识别

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值