Cookie、Session的使用

导读:本篇文章讲解 Cookie、Session的使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71896.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!