步骤 2 : 什么是Session 步骤 3 : setSession.jsp 步骤 4 : getSession.jsp 步骤 5 : Session和Cookie的关系 步骤 6 : Session 原理示意图 步骤 7 : 如果没有cookie,session如何工作 步骤 8 : session的有效期
考虑这个场景:
李佳汜到健身房去练胸肌,首先领了钥匙,然后进了更衣间,把衣服,裤子,手机,钱包都放在盒子里面。 毛竞也到健身房,去练翘臀。首先领了钥匙,然后 进了更衣间,把衣服,裤子,手机,《Java 21天从入门到精通》也放在了一个盒子里,但是这个盒子是和李佳汜的是不同的。 健身房,就相当于服务器,盒子,就是会话Session。 切换到我们常见的购物网站的场景 李佳汜登陆天猫之后,在购物车里看到的物品是蜡烛和皮鞭 毛竞登陆天猫之后,在购物车里看到的物品是手铐和《Java 21天从入门到精通》
Session对应的中文翻译是会话。
会话指的是从用户打开浏览器访问一个网站开始,无论在这个网站中访问了多少页面,点击了多少链接,都属于同一个会话。 直到该用户关闭浏览器为止,都属于同一个会话。 session.setAttribute("name", "teemo"); session对象保存数据的方式,有点像Map的键值对(key-value) "name"是键,"teemo" 是值 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>
<%
session.setAttribute("name", "teemo");
%>
<a href="getSession.jsp">跳转到获取session的页面</a>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%> <% session.setAttribute("name", "teemo"); %> <a href="getSession.jsp">跳转到获取session的页面</a> session.getAttribute("name"); 通过session,根据"name" 取出对应的名称 <%@ 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%>
<%@ 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%>
如果浏览器把cookie功能关闭,那么服务端就无法获取jsessionid,每一次访问,都会生成一个新的session对象。
为了解决这个问题,可以使用 response.encodeURL("getSession.jsp") response.encodeURL方法会把getSession.jsp这个url转换为 getSession.jsp;jsessionid=22424AEA86ADBE89F335EEB649D997A8 通过这个方式,提交jsessionid到服务器。 服务器根据这个jsessionid匹配到对应的session. 与session相关的功能,就可以正常工作了。 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>
<%
session.setAttribute("name", "teemo");
%>
<a href="<%=response.encodeURL("getSession.jsp")%>">跳转到获取session的页面</a>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%> <% session.setAttribute("name", "teemo"); %> <a href="<%=response.encodeURL("getSession.jsp")%>">跳转到获取session的页面</a>
比如登录一个网站,登录后,在短时间内,依然可以继续访问而不用重新登录。
但是较长时间不登录,依然会要求重新登录,这是因为服务端的session在一段时间不使用后,就失效了。 这个时间,在Tomcat默认配置下,是30分钟。 可以通过 d:/tomcat/conf/web.xml 中的session-config 配置进行调整
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2024-08-04
关于 Session 和 Cookie 的理解
3 个答案
虚心求学 跳转到问题位置 答案时间:2024-08-04 完整项目见
网站:https://www.npmjs.com/package/gxdao
安装: cnpm install gxdao@1.1.1
或者: npm install gxdao@1.1.1
cnpm install gxdao@1.1.1 虚心求学 跳转到问题位置 答案时间:2024-08-04 第一张图片有个小错误,session_key 不是通过 post、get 等方式传输,就直接通过 Cookie进行传输和存储。
setSession 设定属性前面的判断条件写错了,直接写成了 else。
代码如下:
if(null!=cookies){
for(Cookie c:cookies){
if(c.getName().equals("session_key")){
isExist = true;
}
}
}
//else
//这里 改成 isExist 的判断条件,错写成 else 了
if(!isExist)
{
虚心求学 跳转到问题位置 答案时间:2024-08-04 setSession 判断 session_id 是否存在的地方写错了。
if(null!=cookies){
for(Cookie c:cookies){
if(c.getName().equals("session_key")){
isExist = true;
}
}
}
//else
//这里 改成 isExist 的判断条件,错写成 else 了
if(!isExist)
{
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2021-12-09
蜡烛皮鞭和手铐是啥意思?
3 个答案
chen_jiayuan 跳转到问题位置 答案时间:2024-03-01 你别说,你还真别说
四方1 跳转到问题位置 答案时间:2023-07-28 如果你只关注到了这个,而没有关注到《Java 21天从入门到精通》,你就永远无法成为Java高手
G1g4lo 跳转到问题位置 答案时间:2022-02-02 离谱???
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2021-04-06
那是不是如果知道了别人的jsessionid的话,会很危险
2020-10-25
站长暗示学java的都是受,举报了(滑稽)
2020-10-18
session的为什么要有getattribute()?
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 21 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|