目录
1. 前言
Session 和 Cookie 的作用有点类似,都是为了存储用户相关的状态信息,是一种会话跟踪技术
Cookie是存储在本地浏览器,而Session存储在服务器- 存储在服务器的数据会更加的安全,不容易被窃取,并且
Session比Cookie使用方便,Session可以存储对象,Cookie只能存储字符串,并且Tomcat 8.x之后的版本中Cookie可以存储的字符类型有限制
2. Session 的获取
2.1. request.getSesssion()
- 调用该方法,如果是第一次请求的时候,服务器会创建一个
Session对象返回 - 如果当前会话已经有了
Session对象那么getSesssion()方法直接返回当前的Session对象
2.2. request.getSession(boolean)
- 当参数为
true时,与requeset.getSession()相同 - 参数为
false,那么如果当前会话中存在Session对象则返回,不存在返回null,而不是创建
3. Session 的实现原理
Session 的实现是依赖 Cookie 的

- 用户第一次请求服务器的时候,浏览器将用户信息发送给服务器,服务器根据用户提交的信息,创建对应的
Session - 请求返回时,将此
Session的唯一标识信息SessionId返回给浏览器,浏览器接收到SessionId信息后,会将此信息存入到Cookie中,同时Cookie会记录此SessionId属于哪个域名 - 用户第二次请求服务器时,该请求会携带
Cookie中的SessionId信息,服务器会从Cookie中取出SessionId,再根据SessionId查询对应的Session信息。如果没有找到说明用户没有登录或者登录失效,如果找到Session证明用户已经登录可执行后面操作
4. Session 的超时时间
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session- 为了防止内存溢出,服务器会把超过
30分钟依然没有活跃的Session从内存中删除。如果你打开网站的一个页面开始长时间不动,超出了30分钟后,再去点击链接或提交表单时你会发现你的身份已经过期,因为你的Session已经丢失了 - 对于单个
Session对象,可以通过在代码中 调用setMaxInactiveInterval()方法设置超时时间,默认是30分钟,单位是秒;值为0或负数表示Session永不超时
5. Session 其他常用 API

6. SessionId 的生命周期
Session 保存在服务器中,而 SessionId 通过 Cookie 发送给客户端,但我们知道 Cookie 的默认生命是 -1,即只在浏览器内存中存在,也就是说如果用户关闭了浏览器,那么这个 Cookie 就有可能丢失了。当客户下一次打开浏览器访问的时候,虽然可能此时服务器端的 Session 还没有过期,但是由于没有了 SessionId,那么此前的 Session 就找不到了,因此客户的状态可能就丢失了,可能就又需要重新登录
对此,我们可以手动设置 JSESSIONID 的 Cookie 的过期时间
@WebServlet("/session-servlet")
public class SessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
HttpSession session = req.getSession();
Cookie jsessionid = new Cookie("JSESSIONID", session.getId());
jsessionid.setMaxAge(30 * 60);
jsessionid.setPath("/");
resp.addCookie(jsessionid);
}
}
7. Session 和 Cookie 的区别
从隐私安全上比较
Cookie存储在浏览器中,信息容易泄露出去Session存储在服务器上,不存在敏感信息泄露问题
从对服务器的负担比较
Session是保存在服务器的,如果每个用户都会产生一个Session,如果是并发访问的用户非常多,是不能使用Session的,Session会消耗大量的内存Cookie是保存在客户端的。不占用服务器的资源
从跨域名上比较
Cookie可以设置domain属性来实现跨域名Session只在当前的域名内有效,不可夸域名
本文探讨了Web开发中的Session技术,包括Session的获取、实现原理、超时时间、生命周期,以及Session与Cookie的区别,强调了Session在安全性、服务器负担和跨域特性方面的特点。
782

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



