Session的使用详解(创建,获取和销毁)

1、为什么使用session,与cookie的区别

  1. cookie保存数据类型是单一的,只能保存字符串类型的数据
  2. cookie的大小有限制

2、session是什么

session保存服务器中

当用户发送一个HTTP请求到服务器时,服务器会检查该请求是否包含session标识符(通常是存cookie),如果没有,则会创建一个新的session(存储区域),并将session标识符发送给客户端。浏览器再发送请求时会携带session标识符,此时服务器根据session标识符就可以找到对应的session(存储区域)

使用session的时候一般要开启cookie如果浏览器没有开启cookie功能,我们可以通过html的url传参完后session的使用

没有大小的限制

信息的保存也是以键值对的形式存在的

1)是什么
是一个域对象,保存在服务器
2)特点
①键值对
②可设置过期时间
③失效:过期或关闭浏览器

3、session的常用方法

request.getSession(true); //返回HttpSession
setAttribute(key,value); //设置属性 key ,value
getAttribute(key); //获取key的值
removeAttribute(String key)	//通过key值删除数据
invalidate(); //将session中的变量全部清空
setMaxInactiveInterval(int interval); //设置session失效时间,单位为秒
getMaxInactiveInterval();//获取session失效时间
getId(); //获取sessionID

4、session的构造和获取代码演示

SetSessionServlet.java

package cn.fpl.servlet;



import cn.fpl.pojo.User;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.Date;

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获得session
        HttpSession httpSession = req.getSession();
        //获得sessionid
        String sessionId = httpSession.getId();
        System.out.println("sessionId:" + sessionId);

        User user = new User();
        user.setUsername("张5丰");
        user.setBirthday(new Date());
        user.setSex("1");

        //往session中添加属性
        httpSession.setAttribute("user", user);
        //设置session的失效时间
        httpSession.setMaxInactiveInterval(60*5);
    }
}

GetSessionServlet.java

package cn.fpl.servlet;



import cn.fpl.pojo.User;

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.util.Date;

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获得session
        HttpSession httpSession = req.getSession();
        //获得session中的属性
        User user = (User) httpSession.getAttribute("user");
        System.out.println(user);
    }
}

web.xml

<servlet>
        <servlet-name>setSession</servlet-name>
        <servlet-class>cn.fpl.servlet.SetSessionServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>setSession</servlet-name>
        <url-pattern>/setSession</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>getSession</servlet-name>
        <servlet-class>cn.fpl.servlet.GetSessionServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getSession</servlet-name>
        <url-pattern>/getSession</url-pattern>
    </servlet-mapping>

运行结果如下:

setSession
在这里插入图片描述
控制台输出存入的sessionid
在这里插入图片描述
getSession
在这里插入图片描述
控制台输出存入的session的信息
在这里插入图片描述

5、销毁session信息

DestroySessionServlet

package cn.fpl.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.util.Date;

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获得session
        HttpSession httpSession = req.getSession();
        //session失效
        httpSession.invalidate();
    }
}

web.xml

<servlet>
        <servlet-name>destroySession</servlet-name>
        <servlet-class>cn.fpl.servlet.DestroySessionServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>destroySession</servlet-name>
        <url-pattern>/destroySession</url-pattern>
    </servlet-mapping>

运行结果如下:

在这里插入图片描述修改url为销毁session后,再次进行查询session信息会发现,已经查不到了!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐