博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Session详解
阅读量:2054 次
发布时间:2019-04-28

本文共 3252 字,大约阅读时间需要 10 分钟。

Session概念:

服务器会给每一个用户 创建一个Session对象

一个Session独占一个浏览器 只要浏览器不关闭 这个Session就一直存在
一个网站登录后 该网站的子页面可以直接访问 并且子页面中会保存用户的信息

Session和Cookie的区别

Cookie是把用户的数据写给用户的浏览器

在用户的浏览器保存(可以保存多个)

Session是把用户的信息写到用户独占的session域中

服务器端保存(存重要信息,避免服务器端资源浪费)
Session由服务器端创建

Cookie中setAttribute( String name, String value) 只能存入String类型

Session中setAttribute( String name, Object value) 可以存入 Object类型

Session使用场景

保存用户登录信息

比如 B站 我们登录之后 每次进入无需重新登录

Cookie流程

Cookie把资源存在本地 每次由用户向服务器端发送

在这里插入图片描述

Session流程

Session把资源存在服务器端 只给了用户身份铭牌 根据这张铭牌 获取资源

在这里插入图片描述

练习Demo

该类常用方法

在这里插入图片描述

创建Servlet类

public class Session extends HttpServlet {
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf8"); resp.setCharacterEncoding("utf8"); resp.setContentType("text/html;charset=utf8"); PrintWriter out = resp.getWriter(); HttpSession session = req.getSession(); if(session.isNew()){
out.write("新创建的Session id为:"+session.getId()); }else{
out.write("之前的Session id为:"+session.getId()); } session.setAttribute("name","潮汕奴仔"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp); }}

在web.xml注册此servlet

Session
com.csnz.servlet.Session
Session
/setSession

启动服务器 访问

在这里插入图片描述
新建Servlet——GetSession类

public class GetSession extends HttpServlet {
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf8"); resp.setCharacterEncoding("utf8"); resp.setContentType("text/html;charset=utf8"); PrintWriter out = resp.getWriter(); HttpSession session = req.getSession(); String name = (String) session.getAttribute("name"); out.write(name); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp); }}

注册Servlet

GetSession
com.csnz.servlet.GetSession
GetSession
/GetSession

启动服务器 先访问GetSession

因为没有set直接get 服务器会报500 显示空指针异常
在这里插入图片描述
先访问set
在这里插入图片描述
再访问get
在这里插入图片描述
手动写 注销Session类

public class SessionOut extends HttpServlet {
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession(); session.removeAttribute("name"); session.invalidate(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp); }}

注册Servlet

SessionOut
com.csnz.servlet.SessionOut
SessionOut
/SessionOut

访问此注销页面

在这里插入图片描述
进行get
在这里插入图片描述
同样 我们可以使用在web.xml中配置Session失效的时间来控制Session的作用域

1

启动服务器访问set

在这里插入图片描述
在这里插入图片描述
一分钟后刷新get页面
在这里插入图片描述

转载地址:http://ilclf.baihongyu.com/

你可能感兴趣的文章
使用 buildx 构建多平台 Docker 镜像
查看>>
Kubelet 中的 “PLEG is not healthy” 到底是个什么鬼?
查看>>
不懂OpenShift,不足以谈云计算!
查看>>
别让自己“墙”了自己
查看>>
让你的网站用上炫酷的中文字体
查看>>
使用 font-spider 对 webfont 网页字体进行压缩
查看>>
云原生服务网格 Istio 1.4 部署指南
查看>>
让 Linux 防火墙新秀 nftables 为你的 VPS 保驾护航
查看>>
Istio 1.4 部署指南
查看>>
贫苦家庭用户的 Envoy xDS 控制平面
查看>>
Kubernetes Pod 网络精髓:pause 容器详解
查看>>
Docker 技术鼻祖 Linux Namespace 入门系列:Namespace API
查看>>
使用 ebpf 深入分析容器网络 dup 包问题
查看>>
Kubelet 中的 “PLEG is not healthy” 到底是个什么鬼?
查看>>
超详细的网络抓包神器 Tcpdump 使用指南
查看>>
从 Kubernetes 资源控制到开放应用模型,控制器的进化之旅
查看>>
从此以后运维与开发过上了没羞没臊的性福生活
查看>>
教你如何优雅地魔改 Grafana 主题,太实用了!
查看>>
让我们来看看回到单体的 Istio 到底该怎么部署
查看>>
超详细的网络抓包神器 tcpdump 使用指南
查看>>