import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/sessiondemo")
public class SessionDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
* Session存储在服务器端,一般存储在服务器的内存中(为了高速存取)
*
* 虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。
* 这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,
* Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,
* 它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。
* */
//获取session
HttpSession session = req.getSession();//session的对象全称叫HttpSession
/*
* 存放数据
* void setAttribute(String name, Object value);
* 获取数据
* Object getAttribute(String name);
* 删除数据
* void removeAttribute(String name);
**/
/*
* 这不得不引发一个问题的思考
* cookie的技术是基于请求头和响应头
* 不同的用户的浏览器中存放的cookie肯定是当时访问服务器时响应体带回来的, 那么不同用户再去访问浏览器时, 服务器接受到的cookie一定是具体用户浏览器发送的req的
* 请求头中的,以此来实现区分不用用户的cookie
* 那么session呢
* 它是在服务器中的
* 是怎么区分获取到的session是具体哪一个用户的呢
*
* 这个问题应该分两种情况
* 第一种是
* 该用户第一次获取session
* 浏览器中并没有可以用来识别这个session是具体哪一个用户的session的cookie信息
* 那么这个session就不会是服务器中已有的session
* 并且这个session会生成一个唯一的id
* 并且在响应时带回给该用户一个cookie对象, 键都是JSESSIONID, 值就是那个唯一的id
*
* 第二种就是
* 该用户的浏览器中已经有session的cookie信息,也就是JSESSIONID
* 那么获取session时就会根据JSESSIONID的值获取相应的session
* */
/*
* 这样一来
* session可以说完全依赖于cookie有JSESSIONID信息才能被用户认领
* 存放JSESSIONID信息的cookie对象能生存多久,就是用户能使用到这个session多久,也就是用户于服务器的这次会话能多久.
* 也即是说,默认情况下,cookie对象的信息浏览器一关闭就销毁了,重开的浏览器就算是同一个用户,获取的session也将是一个新的session
* 就算原本的session依然在服务器中存活,用户也用不到了.就相当于和服务器一次新的会话
*
*
* 例如购物车的实现就是使用的session
* 也就是对于用户来说session放的信息是很重要的
*
*
* 这里要记录一个点, idea不能实现session的锐化
* 只能实现钝化
* 也就是说,如果想使用session的锐化,需要学会将项目部署到tomcat
*
* */
}
}
会话技术之session
最新推荐文章于 2026-01-06 17:11:25 发布
本文详细解析了Servlet中Session的工作原理。Session存储在服务器端,依赖Cookie中的JSESSIONID来标识用户。当用户首次访问时,服务器创建Session并返回JSESSIONID给浏览器。之后的请求携带此Cookie,服务器据此找到对应的Session。Session用于存储用户关键信息,如购物车数据。需要注意的是,Idea环境下无法实现Session的持久化,需部署到Tomcat。
4762

被折叠的 条评论
为什么被折叠?



