HttpSession基础

HttpSession基础

背景

我们都知道,在开发web项目的时候,客户端(浏览器端)与服务器端是需要交互的,客户端给服务器端request请求,服务器端给客户端response响应,这一来一回是需要通过HTTP协议实现的,而HTTP协议是无状态的,它将每一次请求视为一个完全独立的个体,也就是说它不知道这一次的请求与上一次的请求是否有关,是否是已经登陆过的用户发送的请求。所以就需要引入一个跟踪用户会话的机制,让服务器知道到底是谁在向我发送请求,cookie和seeeion就诞生了,它们来记录用户的信息和操作,而本文主要讲Session的基础认识和使用方法。

什么是session

Session简单来说就是javax.servlet.http.HttpSession,它是一个类,我们常说的session也可以理解为HttpSession类的一个对象,这个对象可以调用一些方法,用来存取用户数据和用户的操作。

怎么使用session

1、先获取session对象
在客户端第一次向浏览器端发送request请求并且服务器调用了req.getSession()方法时,服务器会自动创建Session对象,同时也会创建一个cookie,然后将session的id存储在cookie中并发送回客户端,客户端把这个cookie保存下来,每次请求时又会发送回服务器端(服务器帮你拿到了,你只需要获取session就行了)

//获取服务器已为你创建好的Session对象
 HttpSession session=req.getSession();

2、拿到session后我们就可以向里面存东西了,利用如下代码session.setAttribute(“key”,value)向session中保存数据,

 //比如利用session保存用户名称
 session.setAttribute("username",username);

做完这一步,你已经创建了一个session并且保存了一个username。
前面说过,服务器会自动为你创建cookie来保存你session的id并发送回客户端,可以查看一下。
启动tomcat(需要要自己编写一个html表单页面,并且有servlet类来处理请求和响应),打开浏览器然后右键开启检查,可以在你的Respones Headers中找到Set-Cookie,后面保存的就是你的sessionid。
在这里插入图片描述之后的每一次请求,客户端(浏览器)都会将你保存在cookie中的sessionid携带在Request Header中给到服务器,你只需要在服务器中再次使用代码

 HttpSession session=req.getSession();

就能够取到request中的session。你同样可以在浏览器中打开检查,在Request Headers中找到你的sessionid。
在这里插入图片描述

这个session的作用域是一次会话,什么是一次会话,就是你登陆进页面开始,到你退出登录或者关闭浏览器为止,这就是一次会话,一次会话包括多次请求。所以你在session中设置了一个值,这个值在你的整个会话期间都能够被获取到,你同样也可以在这个会话期间向session再存一些其他数据,这样就解决的HTTP协议无状态的问题。现在你通过一个html页面给我发请求,我先去拿我之前设置的session,拿到了,说明你刚刚登录过,我再根据你需求返回response,给你一个html页面。没拿到,也就说明你就没登陆过,我会给你返回一个登录页面让你重新登录。
3、拿到了session并向session里面设置了一个值username后,我们就可以在服务器端打印出session的id以及我刚才存储进去的username(username为dwd)

//打印sessionId
System.out.println(session.getId());
//打印session中保存的username
System.out.println(session.getAttribute("username"));

打印结果:
在这里插入图片描述
可以看到,这里session的id与之前Response Header和Request Header中的JSESSOONID一模一样,这也就说明了session确实是作用于一次会话而非一次请求的。

4、session常用的几种方法
(1)、request.getSession(true)

若存在会话就返回一个会话,不存在就创建一个HttpSession对象并返回

(2)、 session.invalidate();

这个方法就是将session中的变量全部清空

(3)、session.setAttribute(key,value);

设置属性 key ,value

(4)、 session.getAttribute(key);

获取key的值

(5)、session.removeAttribute(key);

删除属性为key的值

cookie和session的区别和联系

1、区别·
(1)cookie是保存在客户端(浏览器)的
session是保存在服务器端的
(2)cookie保存在服务器端,可以被查看,所以安全性能差
session保存在服务器端,安全性能较好
2、联系
session是基于cookie工作的,因为sessionid是保存在cookie中的,会随着每一次会话发送回服务器端,然后服务器就能获取到session并在session中存取值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值