Cookie和Session

Cookie和Session

目录

1.Cookie

1.1.Cookie理解

1.2.对Cookie的验证

2.Session

2.1.Session理解

2.2.Session测试


 

1.Cookie

1.1.Cookie理解

Cookie是储存在用户本地终端上的数据。

首先在讲解Cookie,Cookie存储在本地的服务端,在上文已经体现了,但是Cookie的存储也会在浏览器上进行体现,

下图是我从火狐浏览器截取的我的Cookie的数据

对应的是站点(个人理解就是不同的站点存在不同的Cookie,在浏览器发送请求的时候,同时也会把Cookie发送给服务端。)

下图是我在浏览力扣网站的Cookie (验证了服务的每次请求都会带着对应的Cookie)

 

 

也可以使用命令获取当前的Cookie如下图所示:

使用的命令是:

javascript:alert (document. cookie)

1.2.对Cookie的验证

首先需要创建一个Servlet类。

package edu.wan.Servlet;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;

public class CookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码格式
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/hmtl;charset=utf-8");
        
        //创建一个Cookie,并把这个Cookie放到resp当中去
        Cookie cookie = new Cookie("name","wan");
        //如果没有进行设置的化 这个cookie的有效期就是session
        cookie.setMaxAge(20); //单位是秒
        resp.addCookie(cookie);
        
        //从req获取Cookie,并循环获取cookie名字位name的数据
        Cookie[] cookies = req.getCookies();
        PrintWriter out = resp.getWriter();
        for (int i = 0; i < cookies.length; i++) {
            Cookie cookie1 = cookies[i];
            if (cookie1.getName().equals("name")){
                out.write("获取到了cookie,cookie的值是"+cookie1.getValue());
            }
        }
        out.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

首先我们预测下,当第一次请求的时候,页面肯定时没有"name"值的Cookie,所以页面并没有写入任何东西,应该展示的是一个空页面(但是第一次访问的时候设置了Cookie的值),当我第二次进行这个网址的访问之后,就会展示出输出到前台的内容。

测试结果如下:

当我第一次访问的时候,就是一个空白页面

 

第二次单机访问的时候

 

请求中会带着参数如下

 

Cookie存储到终端上,存储的地址在

注册表的:
  HKEY_CRURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVESION\EXPLORER\USER SHELL FOLDERS  Cookies 的Value的值是实际上Cookie存储的地方。

 

Cookie实现的功能:

  1. 记住密码。
  2. 选择账号自动带出密码。

2.Session

2.1.Session理解

Session存储在网页的服务器端。

首先Session可以存储信息,在服务器启动的时候,就会创建Session。

注:我理解的Session是由Tomcat(部署的服务器进行提供的)并且只有在不同的浏览器获取的Session是不一致的,在一个浏览器打开新的网页,Session是不会改变的。

使用Edge浏览器获取到的SessionId

使用Google浏览器获取到的SessionId

打开一个新网页,获取到的SessionId

2.2.Session测试

把数据存储到Session中

package edu.wan.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

public class SessionServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码格式
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/hmtl;charset=utf-8");
        //从请求中获取session
        HttpSession session = req.getSession();
        //往session中存入数据
        session.setAttribute("name","Wan");
        //获取session的id
        String id = session.getId();
        PrintWriter out = resp.getWriter();
        out.write("获取到的sessionid是:"+id);
        out.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

在第二个Servlet中获取Session并且打出对应的值

如果SessionId 没有改变的化,就会取出Session中的name。

Session可以解决分布式服务的Session共享问题。

首先在使用Nginx做反向代理的时候,有两个或者多个Tomcat提供服务,这样的化就会存在我访问Tomcat1获取的是一个Sessionid,访问Tomcat2返回的是另一个SeesionId,
假如服务有一个登录的要求,我在Tomcat1进行账号的输入和验证,但是我在登录Tomcat2的时候是另一个SessionId,所以就会有登录多次的问题。
如果要解决这个问题,就可以使用相同的SessionId,就是当登录Tomcat1验证之后,把当前的Sessionid给Tomcat2这样就实现了Session共享的问题了。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值