彻底明白JSP的cookie与session

演示 cookie 的创建和访问


步骤1:cookie 在平时生活中的运用
步骤2:什么是cookie
步骤3:setCookie.jsp
步骤4:getCookie.jsp
步骤5:cookie原理示意图

步骤 1 : cookie 在平时生活中的运用

有的网站,登陆的时候,会出现一个选项,问你是否要一周内或者一个月内保持登陆状态。
如果你选了,那么一周之内,都不需要再输入账号密码。
这个功能,就是靠cookie来实现的

步骤 2 : 什么是cookie

Cookie是一种浏览器和服务器交互数据的方式。

Cookie是由服务器端创建,但是不会保存在服务器

创建好之后,发送给浏览器。浏览器保存在用户本地

下一次访问网站的时候,就会把该Cookie发送给服务器。

步骤 3 : setCookie.jsp

在web目录下创建一个文件 setCookie.jsp

Cookie c = new Cookie("name""Gareen");


创建了一个cookie,名字是"name" 值是"Gareen"

c.setMaxAge(24 60 60);


表示这个cookie可以保留一天,如果是0,表示浏览器一关闭就销毁

c.setPath("/");


Path表示访问服务器的所有应用都会提交这个cookie到服务端,如果其值是 /a, 那么就表示仅仅访问 /a 路径的时候才会提交 cookie

response.addCookie(c);


通过response把这个cookie保存在浏览器端

访问地址:

http://127.0.0.1/setCookie.jsp



通过HTTP调试工具也可以在Cookies这一栏看到

setCookie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>

 

<%

    Cookie c = new Cookie("name""Gareen");

    c.setMaxAge(60 24 60);

    c.setPath("/");

    response.addCookie(c);

%>

 

<a href="getCookie.jsp">跳转到获取cookie的页面</a>

步骤 4 : getCookie.jsp

在web目录下创建文件getCookie.jsp
然后访问网页:

http://127.0.0.1/getCookie.jsp


 

Cookie[] cookies  = request.getCookies();


表示获取所有浏览器传递过来的cookie

if (null != cookies )


如果浏览器端没有任何cookie,得到的Cookie数组是null

for (int d = 0; d <= cookies.length - 1; d++) {

   out.print(cookies[d].getName() + ":" + cookies[d].getValue() + "<br>");

}


遍历所有的cookie

可以看到name:Gareen,这个在setCookie.jsp中设置的cookie

注; JSESSIONID 这个不是我们自己设置的cookie,这是tomcat设置的cookie,会在下一章session的学习中用到
通过HTTP调试工具也可以看到浏览器在请求信息里提交了这个Cookie。

getCookie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>

 

<%

    Cookie[] cookies = request.getCookies();

    if (null != cookies)

        for (int d = 0; d <= cookies.length - 1; d++) {

            out.print(cookies[d].getName() + ":" + cookies[d].getValue() + "<br>");

        }

%>

步骤 5 : cookie原理示意图

cookie原理示意图


更多内容,点击了解: http://how2j.cn/k/jsp/jsp-cookie/582.html

 

session 详解


步骤1:健身房的储物柜
步骤2:什么是Session
步骤3:setSession.jsp
步骤4:getSession.jsp
步骤5:Session和Cookie的关系
步骤6:Session 原理示意图
步骤7:如果没有cookie,session如何工作
步骤8:session的有效期

步骤 1 : 健身房的储物柜

考虑这个场景:
李佳汜到健身房去练胸肌,首先领了钥匙,然后进了更衣间,把衣服,裤子,手机,钱包都放在盒子里面。

毛竞也到健身房,去练翘臀首先领了钥匙,然后 进了更衣间,把衣服,裤子,手机,《Java 21天从入门到精通》也放在了一个盒子里,但是这个盒子是和李佳汜的是不同的。

健身房,就相当于服务器,盒子,就是会话Session。

切换到我们常见的购物网站的场景
李佳汜登陆天猫之后,在购物车里看到的物品是蜡烛和皮鞭
毛竞登陆天猫之后,在购物车里看到的物品是手铐和《Java 21天从入门到精通》

步骤 2 : 什么是Session

Session对应的中文翻译是会话。
会话指的是从用户打开浏览器访问一个网站开始,无论在这个网站中访问了多少页面,点击了多少链接,都属于同一个会话。 直到该用户关闭浏览器为止,都属于同一个会话。

步骤 3 : setSession.jsp

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>

步骤 4 : getSession.jsp

session.getAttribute("name");


通过session,根据"name" 取出对应的名称

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%>

步骤 5 : Session和Cookie的关系

回到健身房的储物柜这一段:

李佳汜和毛竞都有自己的盒子,那么他们怎么知道哪个盒子是自己的呢?
通过钥匙就能找到自己的盒子了。

盒子对应服务器上的Session。
钥匙对应浏览器上的Cookie。

步骤 6 : Session 原理示意图

Session 原理示意图

步骤 7 : 如果没有cookie,session如何工作

如果浏览器把cookie功能关闭,那么服务端就无法获取jsessionid,每一次访问,都会生成一个新的session对象。

为了解决这个问题,可以使用

response.encodeURL("getSession.jsp")


response.encodeURL方法会把getSession.jsp这个url转换为

getSession.jsp;jsessionid=22424AEA86ADBE89F335EEB649D997A8


通过这个方式,提交jsessionid到服务器。 服务器根据这个jsessionid匹配到对应的session. 与session相关的功能,就可以正常工作了。

如果没有cookie,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>

步骤 8 : session的有效期

比如登录一个网站,登录后,在短时间内,依然可以继续访问而不用重新登录。

但是较长时间不登录,依然会要求重新登录,这是因为服务端的session在一段时间不使用后,就失效了。

这个时间,在Tomcat默认配置下,是30分钟。

可以通过 d:/tomcat/conf/web.xml 中的session-config 配置进行调整

session的有效期


更多内容,点击了解: http://how2j.cn/k/jsp/jsp-session/583.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值