Cookie和Session的实现及底层原理简要介绍

Cookie和Session的实现及底层原理

Cookie

简要介绍一下,Cookie的底层原理,以及基本使用,方便以后查阅
参考博客:https://blog.csdn.net/Mr_wxc/article/details/102636559
参考博客
https://blog.csdn.net/weixin_41547486/article/details/81294250

Cookie的底层实现原理

  1. 由服务器创建Cookie对象
new Cookie("name","value");
  1. 服务器将创建的cookie对象响应给浏览器
response.addCookie(cookie);
  1. 浏览器从响应头中获得cookie,以后每次请求服务器时浏览器都会在请求头中携带cookie

Cookie的保存位置

cookie由服务器创建,保存在浏览器中

服务器怎样获得cookie

Cookie[] cookies = request.getCookies();//获得浏览器中的所有cookie
 String userpassVal = null;
              //遍历cookies
              for (Cookie cookie : cookies) {
                     //获取cookie的name
                     String cookieName = cookie.getName();
                     if("userpass".equals(cookieName)){
                            //获得Base64编码后的字符串
                            userpassVal = cookie.getValue();
                            System.out.println(userpassVal);
                            //解码用URLDecoder.decode
                            userpassVal = URLDecoder.decode(userpassVal,"UTF-8");
                            System.out.println(userpassVal);
                     }

              }     

Cookie知识点

  • cookie的默认存活时间是浏览器关闭(即浏览器关闭后cookie就失效)
  • 设置cookie的存活时间

setMaxAge(int expiry)
1、正整数:表示保存的时间,以秒为单位
2、负整数:表示浏览器关闭cookie就失效了
3、零:表示删除同名的cookie数据

  • cookie数据类型只能保存非中文字符串类型

cookie中是不可以保存中文的,但可以使用URLEncoder.encode()方法编码后再存放到cookie中。获得cookie时,使用URLEncoder.decode()方法解码就可以了
URLEncoder.encode(“name”,“UTF-8”);
URLEncoder.decode(“name”,“UTF-8”);

  • 可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB
  • Cookie的不可跨域名性

Session

Session的底层原理实现

通过Cookie的实现

客户端第一次访问Session的时候,会在服务器端生成一个Session对象并生成一个唯一标识JSessionId,服务器端会将JSessionID存放在Cookie中响应给客户端,客户端之后的每一次请求都会JSessionID,服务器端从Cookie中获得JSessionID,去查找对应的session对象,如果没有查找到就会创建一个新的session对象,查找到就可以进行后续操作

通过URL重写来实现
当客户端的cookie被禁用时,想要使用session就必须通过URL重写的方式
如何重写URL:通过response.encodeURL()方法
encodeURL()的两个作用

  • 第一个作用:转码(说明:转中文的编码,或者一些其他特殊的编码。就好比如网页的链接中存在中文字符,就会转换成为一些百分号或者其他的符号代替。)
  • 第二个作用:URL后面加入sessionID,当不支持cookie的时候,可以使用encodeURL()方法,encodeUTL()后面跟上sessionID,这样的话,在禁用cookie的浏览器中同时也可以使用session了。但是需要自己编程,只要链接支持,想用session就必须加上encodeURL()。

提示:若想程序中永远支持session,那就必须加上encodeURL(),当别人禁用了cookie,一样可以使用session。

简单的代码例子:在没有使用encodeURL()方法前的代码

out.println("<br><a href=" + "SessionInfoServlet" + ">refresh</a>");

在使用encodeURL()方法后的代码

out.println("<br><a href=" + response.encodeURL("SessionInfoServlet") + ">refresh</a>");

Session参考博客:https://blog.csdn.net/weixin_42217767/article/details/92760353
博主的版权声明:本文为CSDN博主「广小白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42217767/article/details/92760353

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值