Session什么意思?一文带你超详细了解Session的原理及应用
Session什么意思?一文带你超详细了解Session的原理及应用session 简介
session 是我们 jsp 九大隐含对象的一个对象 。
session 称作域对象,他的作用是保存一些信息,而 session 这个域对象是一次会话期间使用同一个对象 。所以这个对象可以用来保存共享数据 。
【Session什么意思?一文带你超详细了解Session的原理及应用】使用 Cookie 有一个非常大的局限,就是如果 Cookie 很多,则无形的增加了客户端与服务端的数据传输量 。而且由于浏览器对 Cookie 数量的限制,注定我们不能再 Cookie 中保存过多的信息,于是 Session 出现 。session 是基于 cookie 的 。
Session 的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为JSESSIONID 的 Cookie,这个 JESSIONID 对应这个服务器中的一个 Session 对象,通过它就可以获取到保存用户信息的 Session 。
在用户第一次使用 session 的时候(访问 jsp 页面会获取 session,所以一般访问 index.jsp 就算是第一次使用 session 了),服务器会为用户创建一个 session 域对象 。使用jsessionid 和这个对象关联,这个对象在整个用户会话期间使用 。响应体增加 set-cookie:jsessionid=xxx 的项 。用户下次以后的请求都会携带 jsessionid 这个参数,我们使用request.getSession()的时候,就会使用 jsessionid 取出 session 对象 。
session 原理图:



代码:
jsp 页面
<%String token = System.currentTimeMillis() + "";request.getSession().setAttribute(token, "");%><div><h1>测试表单重复提交</h1><form action="login" method="get">用户名:<input name="username" type="text"/>密码:<input name="password" type="password"><input name="token" value="https://www.yf-zs.com/jiaoyu/"><input type="submit"></form><hr></div>Servlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession();String token = request.getParameter("token");Object attribute = session.getAttribute(token); response.setContentType("text/html;charset=UTF-8"); if(attribute!=null){session.removeAttribute(token); response.getWriter().write("请求成功!"); }else{ response.getWriter().write("请不要重复请求!"); }}其实防止重复提交的核心就是让服务器有一个字段能来识别此次请求是否已经执行 。这个字段需要页面传递过来,因为只要回退回去的页面,字段都是一致的 。不会变化,通过这个特性我们想到了 token 机制来防止重复提交
欢迎工作一到五年的Java工程师朋友们加入Java程序员开发: 721575865
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
