一,应用背景
在web开发中,存在很多页面跳转,为了在页面之间传递数据,避免重复输入,出现了session机制。
例如,你在购物网站选了一堆物品,过了几个月再次登陆的时候,发现购物车里还有这些东西。这里就是使用了session或者cookie机制。
二,session技术简介
HTTP 是一种"无状态"协议,这意味着每次客户端检索网页时,客户端打开一个单独的连接到 Web 服务器,服务器会自动不保留之前客户端请求的任何记录。但是仍然有方式来维持 Web 客户端和 Web 服务器之间的 session 会话:session机制。
在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
三,session实现原理
当服务器创建完session对象后,会把session对象的id以cookie形式返回给客户端。这样,当用户保持当前浏览器的情况下再去访问服务器时,会把session的id传给服务器,服务器根据session的id来为用户提供相应的服务。
——Session和Cookie的主要区别在于:
Cookie是把用户的数据写给用户的浏览器。(在前端)
Session技术把用户的数据写到用户独占的session中(在后端)。
四,应用例子
例如:登陆例子,在登陆servlet里,创建session,保存用户名密码。
//创建session对象
HttpSession session = request.getSession();
//把用户数据保存在session域对象中
session.setAttribute("loginName", userName);
//跳转到用户主页
response.sendRedirect(request.getContextPath()+"/IndexServlet");
在其他servlet里,取出用户名密码
//得到session对象
HttpSession session = request.getSession(false);
if(session==null){
//没有登录成功,跳转到登录页面
response.sendRedirect(request.getContextPath()+"/login.html");
return;
}
//取出会话数据
String loginName = (String)session.getAttribute("loginName");
if(loginName==null){
//没有登录成功,跳转到登录页面
response.sendRedirect(request.getContextPath()+"/login.html");
return;
}
五,session有效时间
设置session有效时间,总共有三种方法,
方式一:在web.xml中设置session-config。
方式二:在Tomcat的/conf/web.xml中。
方式三:在Servlet中设置。
其中,第三种方法优先级最高。
有效时间的默认单位为秒,设置为-1表示永不过期。
//以秒为单位
session.setMaxInactiveInterval(30*60);
参考资料:
Servlet Session 跟踪
https://www.runoob.com/servlet/servlet-session-tracking.html
java中session的用法与原理
https://blog.csdn.net/samniwu/article/details/90417160
JavaWeb Session的用法
https://blog.csdn.net/zx2015216856/article/details/81040497
重点,登陆参考例子:
【JavaWeb】利用Session保存用户登录信息
https://blog.csdn.net/liu_wenbin/article/details/59531184
关于session的失效时间和过期
https://blog.csdn.net/fanbingfu/article/details/78318855
Javaweb设置session过期时间
https://www.cnblogs.com/ibigboy/p/11544243.html#_label0_0