WEB核心【会话技术】第十五章

简介: 本文详细介绍Web知识中的Session和cookie技术

1,会话技术

       1.1,简述及分类

会话:一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程会话技术:用来保存会话过程中产生的数据


会话技术:


保存在浏览器的会话技术---Cookie


保存在服务器的会话技术---Session


会话开启:浏览器开启,第一次访问服务器


会话关闭:浏览器关闭


       1.2,浏览器端会话技术-cookie【阶段重点】



               1.2.1:简述&入门



Cookie是由服务器进行编写、读取


Cookie是由浏览器进行保存


Cookie传递中,cookie是k=v键值对方式传递。


依赖请求头Cookies 、响应头Set-Cookie





/**

* 写cookie

*/

public void run1(){

   //1、服务器端创建cookie对象,key value   ,key和value必须是String

   Cookie c1 = new Cookie("k1", "v1");

   Cookie c2 = new Cookie("k2", "v2");

   //2、将cookie追加到响应头

   HttpServletResponse response = getResponse();

   response.addCookie(c1);

   response.addCookie(c2);


请求头中有cookie信息:



上述方法若获取不到cookie,就会返回Null


/**

* 读cookie

*/

public void run2(){

   //1、获取request对象

   HttpServletRequest request = getRequest();

   //2、读取cookie信息,每个cookie是一个cookie对象,多个cookie是一个cookie[]

   Cookie[] arr = request.getCookies();

   //3、遍历数组,每遍历一个cookie对象。 通过getName获取key   通过getValue获取value

   if(arr!=null){

       for (Cookie cookie : arr) {

           System.out.println(cookie.getName()+"="+cookie.getValue());

       }

   }

}


注意:


关闭服务器,不会影响浏览器保存的cookie

关闭浏览器(会话技术),会导致自定义保存的cookie失效(临时cookie)

小结:


Cookie是由服务器编写、读取


Cookie是由浏览器保存


               1.2.2:注意事项




一次性不能向前端写出过多cookie


Cookie不要滥用,否则会导致新cookie数据无法保存问题。


3,




public static void main(String[] args) throws UnsupportedEncodingException {

   String str = "小张";

   String encode = URLEncoder.encode(str, "utf-8");

   System.out.println(encode);//%E5%B0%8F%E5%BC%A0

   String decode = URLDecoder.decode(encode, "utf-8");

   System.out.println(decode);//小张

}

/**

* cookie中文

*/

public void run4() throws UnsupportedEncodingException {

   Cookie c = new Cookie("k3", URLEncoder.encode("小张","utf-8"));

   getResponse().addCookie(c);

}


public void run5() throws UnsupportedEncodingException {

   //1、获取request对象

   HttpServletRequest request = getRequest();

   //2、读取cookie信息,每个cookie是一个cookie对象,多个cookie是一个cookie[]

   Cookie[] arr = request.getCookies();

   //3、遍历数组,每遍历一个cookie对象。 通过getName获取key   通过getValue获取value

   if(arr!=null){

       for (Cookie cookie : arr) {

           System.out.println(cookie.getName()+"="+ URLDecoder.decode(cookie.getValue(),"utf-8"));

       }

   }

}

Cookie:不能直接存中文,会报非法参数异常,可以使用URL编码存储cookie,可以使用URL解码从cookie取出中文信息


               1.2.3:持久化




持久化cookie


/**

* 持久化cookie

*/

public void run6(){

   //1、创建cookie对象

   Cookie c = new Cookie("k4", "v4");

   //2、设置存活时间 (≥0  持久化cookie    -1 临时cookie)

   c.setMaxAge(60);//60秒

   //3、添加响应头

   getResponse().addCookie(c);

}

小结:


持久化cookie,不以浏览器关闭而销毁cookie,以cookie过期来销毁cookie。


持久化cookie传递时:


Set-Cookie:k=v;到期时间;


2、cookie立即过期(删除cookie)


/**

* 持久化cookie-立刻销毁

*/

public void run7(){

   //1、创建cookie对象

   Cookie c = new Cookie("k5", "v5");

   //2、立刻销毁

   c.setMaxAge(0);

   //3、添加响应头

   getResponse().addCookie(c);

}

解析:向浏览器写出一个k5=v5 cookie,该cookie在1970年1月1号就过期(早就过期了)


注意:


SetMaxAge(0); 立刻过期,立刻销毁(删除某个cookie)



3、删除某个cookie


默认情况下:cookie名称如果相同,就会新的键值对覆盖旧的键值对。


第一次执行:k1=v1;过期时间是2021/7/1 17:45:00


第二次执行:k1=v3;过期时间是2021/7/2 17:45:00


浏览器保存的是k1=v3;过期时间是2021/7/2 17:45:00


若我们设置了一个cookie,该cookie是7天后才过期。


若需要删除该cookie,只需要服务器重新设置该cookie有效时间为0.


/**

* 设置保存7天的cookie

*/

public void run8(){

   Cookie c = new Cookie("k8", "v8");

   c.setMaxAge(60*60*24*7);//7天

   getResponse().addCookie(c);

}


/**

* 让保存7天的cookie,立刻销毁删除

*/

public void run9(){

   Cookie c = new Cookie("k8", "");

   c.setMaxAge(0);//立刻销毁

   getResponse().addCookie(c);

}


小结:如果我们需要删除某个cookie,默认情况下,需要cookie名和待删除cookie的名字保持一致,setMaxAge(0),写出响应头,即可覆盖原先在浏览器保存的cookie,该cookie会立刻过期销毁,达到删除cookie的目的。


               1.2.4:有效路径    

 

浏览器:


C1:   /项目名/aaa/


C2:   /项目名/bbb/


C3:   /项目名/aaa/bbb/


访问路径:


http://localhost:8080/项目名/ 没有cookie发给服务器


http://localhost:8080/项目名/aaa/1.html c1被发给服务器


http://localhost:8080/项目名/aaa/bbb/1.html c1和c3被发给服务器


http://localhost:8080/项目名/bbb/1.html c2被发给服务器



两种常见设置方式:


当前服务器可用cookie:  setPath("/");    http://localhost:8080/

当前项目某个模块cookie:setPath("/项目名/模块名/");

setPath("/p1/user/");   http://localhost:8080/p1/user/


setPath("/p1/product/");   http://localhost:8080/p1/product/



/**

* cookie有效路径设置

*/

public void run10(){

   Cookie c1 = new Cookie("c1", "v1");

   Cookie c2 = new Cookie("c2", "v1");

   Cookie c3 = new Cookie("c3", "v1");

   //设置有效路径

   c1.setPath("/day10_1/aaa/");

   c2.setPath("/day10_1/bbb/");

   c3.setPath("/day10_1/aaa/bbb/");

   getResponse().addCookie(c1);

   getResponse().addCookie(c2);

   getResponse().addCookie(c3);

}


               1.2.5:唯一标识




/**

* cookie唯一标识

*/

public void run11(){

   Cookie a1 = new Cookie("a1", "v1");

   Cookie a2 = new Cookie("a1", "v2");

   //a1.setDomain();//设置域名

   a1.setPath("/day10_1/aaa/");

   a2.setPath("/day10_1/bbb/");

   getResponse().addCookie(a1);

   getResponse().addCookie(a2);

}


如果唯一标识都相同:两个cookie相互覆盖,新cookie覆盖旧cookie


如果唯一标识不相同:两个cookie分别保存,互不影响


补充:


有效路径认知:


如果当前servlet的访问路径是:


http://localhost:8080/day10_1/aaa/bbb/d1?method=run1


若该servlet设置cookie,没有手动给予有效路径,有效路径默认为当前目录:


/day10_1/aaa/bbb/

相关文章
|
1月前
|
存储 安全 关系型数据库
后端技术:构建高效稳定的现代Web应用
【10月更文挑战第5天】后端技术:构建高效稳定的现代Web应用
54 1
|
2月前
|
SQL 缓存 搜索推荐
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,涵盖从基础架构到性能优化的多个方面。通过分析当前主流后端技术的优缺点,并提供一些实用的解决方案和建议,帮助开发者更好地应对日常开发中的挑战。
53 1
|
1月前
|
缓存 前端开发 JavaScript
前端技术探索:构建高效、响应式Web应用的秘诀
前端技术探索:构建高效、响应式Web应用的秘诀
61 0
|
17天前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
36 1
|
21天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
48 2
|
1月前
|
安全 网络协议 算法
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
158 4
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
|
1月前
|
人工智能 前端开发
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
|
1月前
|
存储 安全 数据库
后端技术在现代Web开发中的实践与创新
【10月更文挑战第13天】 本文将深入探讨后端技术在现代Web开发中的重要性,通过实际案例分析展示如何利用先进的后端技术提升用户体验和系统性能。我们将从基础架构设计、数据库优化、安全性保障等方面展开讨论,为读者提供清晰的指导和实用的技巧。无论是新手开发者还是经验丰富的技术人员,都能从中获得启发和帮助。
35 2
|
1月前
|
机器学习/深度学习 移动开发 JavaScript
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
131 0
|
1月前
|
自然语言处理 Cloud Native 数据安全/隐私保护
后端技术在现代Web开发中的实践与创新
本文探讨了后端技术在现代Web开发中的重要性及其应用。通过分析当前流行的后端框架和开发模式,揭示了如何利用这些技术来构建高效、可扩展的Web应用程序。同时,文章也讨论了未来后端技术的发展趋势,为开发者提供了一些启示。

热门文章

最新文章

下一篇
无影云桌面