session意为会话,用户打开浏览器访问一个网站无论点击多少页面,点击多少链接直到关闭浏览器 都属于一个会话。
session和Cookie是两兄弟 理解了Cookie 那么session也不难理解
同样验证可以创建 SetSession.jsp 和GetSession.jsp
SetSession.jsp:
<%@ page language="java" contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>
<%
session.setAttribute("name","yyp");
%>
<a href="getSession.jsp">跳转到获取Session的页面</a>
setAttribute的设值方式 和map类似也是键值对 这样建立在之前的JavaSE的集合框架的基础 理解不难
GetSession.jsp :
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>
<%
String name = (String)session.getAttribute("name");
%>
session中的name: <%=name%>
getAttribute通过name获取值 其值的数据类型需要进行强转赋值
Session和Cookie的关系:
第一次访问服务器的时候,会在响应头里面看到Set-Cookie信息,
没有带上 Jsessionid 服务端没有Jsessionid会创建一个session对象 把name的值放入 带上Jsessionid 浏览器把该Jsessionid保存于cookie中发送给服务端 把所有的session进行比对 找出相应的session 把name的值取出
那么jsessionid是什么
事实上当用户访问服务器的时候会为每一个用户开启一个session,浏览器是怎么判断这个session到底是属于哪个用户呢?
jsessionid的作用就体现出来了:jsessionid就是用来判断当前用户对应于哪个session。换句话说服务器识别session的方法是通过jsessionid来告诉服务器该客户端的session在内存的什么地方。
事实上jsessionid ==request.getSession().getId()
以上提到的中间运作 主要是cookie保存得有Jsessionid 那如果浏览器关闭了cookie功能 如何来运行session
为了解决这个问题,可以使用
response.encodeURL(“getSession.jsp”)
<a href="<%=response.encodeURL("getSession.jsp")%>">跳转到获取session的页面</a>
response.encodeURL这个方法会将getSession.jsp这个url转换为
getSession.jsp;jsessionid=22424AEA86ADBE89F335EEB649D997A8
也即直接将jsessionid提交到服务端 进行session的选取
既然cookie有有效期自然session也有有效期
就像登校园网一样 长时间之后再次进入会重新登录
这个时间,在Tomcat默认配置下,是30分钟。
可以通过 d:/tomcat/conf/web.xml 中的session-config 配置进行调整