证明session基于cookie

证明session基于cookie

前言:

关于一些结论的整理

1.javaweb的四大作用域

四个作用域: pageContext、request、session、application

作用范围大小为:从左往右,依次为从小到大

2.session、request、和ServletContext的区别

从作用范围来说,
session的作用范围是针对一个客户端,session对象和客户端是一一对应的。
request的作用范围是一个客户端的一次请求。
ServletContext的作用范围是服务器启动全程,并且针对所有的客户端。

引入这个话题的原因:

我之前写一个验证码登录的demo示例,但是不知道把需要验证码放到那个作用域中

两个选择:

  • 验证码信息放到Session中
  • 验证码信息放到ServletContext中

然后我就想这两者的区别,因为这是好久之前的知识有点忘了,所以写这篇博客是为了复习javaweb中的相关知识

证明session时针对于客户端的

测试步骤

为了复习javaweb,所以我使用springboot和servlet分别证明以上结论

1.servlet的方式

补充知识

使用ide工具创建动态的web工程步骤(也可以说是使用ide工具写一个servlet的步骤)

  • 使用idea创建java-web的动态工程步骤

参考网址:

https://blog.csdn.net/TZB10000/article/details/101156547?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

  • 使用eclipse创建java-web的动态工程的步骤

参考网址:

https://blog.csdn.net/IBLiplus/article/details/81211400?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160665793719724818032955%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160665793719724818032955&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-4-81211400.first_rank_v2_rank_v28p2&utm_term=eclipse%E5%88%9B%E5%BB%BAservlet&spm=1018.2118.3001.4449

引入servlet模板

说明:

这套servlet模板可以直接使用,省的每次还要对已有的代码删删减减

import java.io.IOException;
 
import javax.servlet.ServletException;
 
import javax.servlet.http.HttpServlet;
 
import javax.servlet.http.HttpServletRequest;
 
import javax.servlet.http.HttpServletResponse;
 
/**
 
 *servlet模板直接使用,只需要改变类名即可
 
 */
 
public class TestServlet extends HttpServlet {
 
    private static final long serialVersionUID = 1L;
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
       //>>处理POST请求参数乱码
 
       request.setCharacterEncoding("utf-8");
 
       //>>处理响应正文乱码
 
       response.setContentType("text/html;charset=utf-8");
 
       //TODO...
 
      
 
    }
 
 
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
       doGet(request, response);
 
    }
 
}

我是用的是idea

在idea中进行测试

1.写一个设置session的servlet

package com.shaoming.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Auther: shaoming
 * @Date: 2020/11/28 15:53
 * @Description:
    测试session正对于浏览器而言
   这个servlet用户设置session
 */
//@WebServlet(name = "SetSessionServlet")
public class SetSessionServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //在session里面设置值
        request.getSession().setAttribute("mysession","我在Session里面设置的值");
    }
}

2.写一个获取session的servlet

package com.shaoming.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @Auther: shaoming
 * @Date: 2020/11/28 15:55
 * @Description:
 */
//@WebServlet(name = "GetSessionServlet")
public class GetSessionServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //>>处理POST请求参数乱码

        request.setCharacterEncoding("utf-8");

        //>>处理响应正文乱码

        response.setContentType("text/html;charset=utf-8");


         String mysession = (String) request.getSession().getAttribute("mysession");
        PrintWriter writer = response.getWriter();
        writer.println("我获取到的session中的数据为:   "+mysession);
    }
}

3.配置xml

重点推荐

我是推荐servlet的配置不要用注解,就是用xml配置的方式,因为更接近原生的servlet,注解的方式是版本高的时候出现的,如果都用注解,我们不如用springboot了,哈哈

配置文件的位置

web/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>SetSessionServlet</servlet-name>
        <servlet-class>com.shaoming.session.SetSessionServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SetSessionServlet</servlet-name>
        <url-pattern>/SetSessionServlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>GetSessionServlet</servlet-name>
        <servlet-class>com.shaoming.session.GetSessionServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>GetSessionServlet</servlet-name>
        <url-pattern>/GetSessionServlet</url-pattern>
    </servlet-mapping>


</web-app>

4.测试

测试分三种情况

4.1正常测试

设置session的值

url:http://localhost:8080/java_web/SetSessionServlet

获取session的值

url:http://localhost:8080/java_web/GetSessionServlet

页面获取到session的值

我获取到的session中的数据为: 我在Session里面设置的值

4.2去除cookie测试

设置session的值

url:http://localhost:8080/java_web/SetSessionServlet

去除浏览器里面的cookie

image-20201130100106773

获取session的值

url:http://localhost:8080/java_web/GetSessionServlet

页面获取到session的值(没有获取到session)

我获取到的session中的数据为: null

4.3更换浏览器设置

设置session的值

url:http://localhost:8080/java_web/SetSessionServlet

更换为火狐浏览器

获取session的值

url:http://localhost:8080/java_web/GetSessionServlet

页面获取到session的值(没有获取到session)

我获取到的session中的数据为: null

2.springmvc的方式

在idea中进行测试

1.建一个springboot工程,导入web依赖

省略

2.写一个Controller进行测试

package com.ckf.springbootswagger.controller;

import com.ckf.springbootswagger.pojo.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * @Auther: shaoming
 * @Date: 2020/12/2 17:26
 * @Description:
 */
@RestController
@Api("session测试")
public class SessionController {
     @GetMapping("/setsession")//get请求
        // @ResponseBody
         @ApiOperation(value = "设置session", notes = "", httpMethod = "")
         public R setsession(HttpServletRequest request) {
         HttpSession session = request.getSession();
         session.setAttribute("sessionval","root");
         return R.ok().put("设置session的值为:","root");
         }
          @GetMapping("/getsession")//get请求
             // @ResponseBody
              @ApiOperation(value = "获取session", notes = "", httpMethod = "")
              public R getsession(HttpServletRequest request) {
              HttpSession session = request.getSession();
              String sessionval = (String) session.getAttribute("sessionval");
              return R.ok().put("获取sesion的值为: ",sessionval);
              }
}

3.测试

参照servlet三种方式进行测试

3.1正常测试

设置session的值

url:http://localhost:8081/setsession

{
  "code": 0,
  "设置session的值为:": "root"
}

获取session的值

url:http://localhost:8081/getsession

{
  "code": 0,
  "获取sesion的值为: ": "root"
}
3.2去除cookie测试

设置session的值

url:http://localhost:8081/setsession

{
  "code": 0,
  "设置session的值为:": "root"
}

去除浏览器里面的cookie

获取session的值

url:http://localhost:8081/getsession

页面获取到session的值(没有获取到session)

{
  "code": 0,
  "设置session的值为:": null
}
3.3更换浏览器设置

设置session的值

url:http://localhost:8081/setsession

{
  "code": 0,
  "设置session的值为:": "root"
}

更换为火狐浏览器

获取session的值

url:http://localhost:8081/getsession

页面获取到session的值(没有获取到session)

{
  "code": 0,
  "设置session的值为:": null
}

结论

1.session是基于cookie的,sessionid存在cookie中

2.证明了session针对于浏览器的

个人csdn博客网址:https://blog.csdn.net/shaoming314

3.3更换浏览器设置

设置session的值

url:http://localhost:8081/setsession

{
  "code": 0,
  "设置session的值为:": "root"
}

更换为火狐浏览器

获取session的值

url:http://localhost:8081/getsession

页面获取到session的值(没有获取到session)

{
  "code": 0,
  "设置session的值为:": null
}

结论

1.session是基于cookie的,sessionid存在cookie中

2.证明了session针对于浏览器的

个人csdn博客网址:https://blog.csdn.net/shaoming314

jam
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值