Cookie、Session的使用

本文详细介绍了Web开发中的会话管理技术Cookie和Session,包括它们的工作原理、应用场景以及如何在Java Servlet中使用。Cookie是客户端技术,保存在用户浏览器中,而Session是服务器端技术,用于存储用户会话信息。通过示例代码展示了如何创建、读取和注销Session,并讨论了Session的过期时间配置。此外,还探讨了两者在保存用户登录信息和购物车信息等场景下的使用。
摘要由CSDN通过智能技术生成

Cookie、Session

1:会话:

会话:用户打开浏览器,点击很多的超链接,访问多个web资源,关闭浏览器 ,这个过程就称之为一次会话;

有状态会话:每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;

一个网站,怎么证明来过;

客户端     服务器端

1:服务器给客户一个信件,客户下次访问的时候带上信件就可以了;Cookie
2:服务器登记你来过了,下次你来的时候我来匹配你;Session;

无状态会话:打开关闭web资源

2:保存会话的两种方式;

Cookie
客户端技术:(响应,请求)

Session
服务器端技术: 利用这个技术,可以保存用户的会话信息,我们可以把信息或者数据放在Session中,

常见:网站登录之后,你下次不用在登录,第二次访问直接就上去了;

3:Cookie

在这里插入图片描述

1:从请求中拿到Cookie信息;
2:服务器响应给客户端Cookie;

Cookie一般会保存在本地用户的目录下:AppData;
一个网站cookie应该有上限;

4:Session

在这里插入图片描述
什么是Session:

  • 服务器会给每一个用户(浏览器)创建一个Session对象。
  • 一个Session独占一个浏览器,只要浏览器不关闭,这个Session就一直存在;
  • 用户登录之后,整个网站它都可以访问,---->保存用户的信息,保存购物车的信息…

Cookie和Session的区别:

  • Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
  • Session把用户的数据写道到用户独占的Session中,服务器端保存,(保存重要的信息,减少服务器资源的浪费。)
  • Session对象由服务器创建

使用场景:

  • 保存一个用户的登陆信息
  • 购物车信息
  • 在网站中经常会使用的数据,我们将会把它保存在Session中

使用Session

创建一个SessionDemo01

public class SessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //解决中文乱码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        //得到Session
        HttpSession session = req.getSession();

        //给Session中存东西
//        session.setAttribute("name","铁锤"); 给session放入一个字符串
        session.setAttribute("name",new Person("铁锤",1));//放入一个对象;

        //获取Session的ID
        String sessionId = session.getId();

        //判断Session是不是新创建的;
        if(session.isNew()){
            resp.getWriter().write("Session创建成功,ID:"+sessionId);
        }else {
            resp.getWriter().write("Session已经在服务器中存在了,ID:"+sessionId);
        }

//        //Session创建的时候做了些什么事情;
//        Cookie cookie = new Cookie("JSESSIONID",sessionId);
//        resp.addCookie(cookie);

    }

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

配置Web.xml文件

    <servlet>
        <servlet-name>SessionDemo01</servlet-name>
        <servlet-class>com.kuang.servlet.SessionDemo01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SessionDemo01</servlet-name>
        <url-pattern>/s1</url-pattern>
    </servlet-mapping>

Session不仅可以存储一个字符串,也可以存储一个对象

/**
 * Session不仅可以存储一个字符串,也可以存储一个对象
 */

public class SessionDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //解决中文乱码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

//        //得到一个Session
//        HttpSession session = req.getSession();
//        String name = (String) session.getAttribute("name");
//
//        System.out.println(name);



        //得到一个Session
        HttpSession session = req.getSession();
        Person person = (Person) session.getAttribute("name");

        System.out.println(person.toString());

    }

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

配置一个web.xml

    <servlet>
        <servlet-name>SessionDemo02</servlet-name>
        <servlet-class>com.kuang.servlet.SessionDemo02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SessionDemo02</servlet-name>
        <url-pattern>/s2</url-pattern>
    </servlet-mapping>

手动注销Session

public class SessionDemo03 extends HttpServlet {

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

        //解决中文乱码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");


        HttpSession session = req.getSession();
        session.removeAttribute("name");

        //手动注销Session
        session.invalidate();
        //sessionId会立刻没有,但是会立马创建一个新的


    }

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

配置web.xml


    <servlet>
        <servlet-name>SessionDemo03</servlet-name>
        <servlet-class>com.kuang.servlet.SessionDemo03</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SessionDemo03</servlet-name>
        <url-pattern>/s3</url-pattern>
    </servlet-mapping>

在web.xml中我们可以配置Session过期时间

  <!--设置Session默认的失效单位-->
    <session-config>
        <!--以分钟为单位-->
        <session-timeout>1</session-timeout>
    </session-config>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值