JavaWeb学习笔记总结(三)

目录

4、Cookie,Session

4.1、会话

4.2、保存会话的两种技术

4.3、cookie

4.4、Session


4、Cookie,Session

4.1、会话

会话:用户打开浏览器,访问了许多的网络资源,然后关闭了浏览器,这个过程就可以称之为会话。

有状态会话:一个用户打开了浏览器,然后关闭了浏览器,再打开浏览器的时候,浏览器知道你曾经来过,这个可以称之为有状态会话。

这里有一个问题:一个网站,怎么证明你曾经来过?

  • 服务端给你一个信物,客户端下次再访问这个网站的时候带上这个信物,就能证明你曾经来过,这个相当于 cookie
  • 服务端登记你来过了,但是没给你信物,你下次来的时候服务端会去众多曾经来过的对象中去匹配你,匹配到了就证明你曾经来过这个网站,相当于session

4.2、保存会话的两种技术

  • cookie:
    • 客户端技术(响应,请求)
  • session:
    • 服务端技术,利用这个技术,可以保存用户的会话信息,我们可以把用户信息存放到session中,例如常见的我们打开一个网站登录了,关闭了之后,服务器再session中保存了你的会话信息了,那你下次来的时候就不用再登录了。

4.3、cookie

1、从请求中拿到cookie信息

2、服务器响应给客户端cookie

//获得cookie
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            //获得cookie中的key
            cookie.getName();
            //获得cookie中的value
            cookie.getValue();
            //设置cookie的有效期
            cookie.setMaxAge(24*60*60);
        }
        //新建一个cookie
        Cookie time = new Cookie("time", System.currentTimeMillis() + "");

        //响应给客户端一个cookie
        resp.addCookie(time);

 Cookie一般会再本地的用户目录下的appdata

  • 一个cookie只能保存一个信息
  • 一个web网站可以给浏览器发送多个cookie,最多存放20个cookie;
  • Cookie大小有限制4kb;
  • 浏览器上限是300个cookie;
  • 不设置有效期,关闭浏览器,cookie自动失效
  • 要删除cookie可以设置有效期为0,或者不设置有效期

编码解码

URLEncoder.encode("小张","utf-8");
            URLDecoder.decode(cookie.getValue(),"utf-8");

4.4、Session

什么是Session 

  • 用户打开浏览器登录一个网站后,服务端就会给用户(也就是浏览器)创建一个session
  • 一个session独占一个浏览器,只要浏览器不关闭,session就一直存在,客户端拿到的是sessionID,是唯一的
  • 用户登录之后,获得到服务端创建的一个session,整个网站它都可以访问,比如用户的登录信息,用户的购物车信息等,都能够从session中获取到(一般这些信息是被保存在session中的,然后用cookie携带sessionID发送给用户)

Cookie和Session的区别

  • Cookie是把用户的数据写到cookie中发给用户,浏览器保存(可以存多个)
  • Session是把用户的数据写到用户独占的session中,服务端保存(保存用户的重要信息,减少服务器资源浪费)
  • Session对象由服务创建

设置session自动过期

<!--设置Session默认的失效时间-->
<session-config>
<!--15分钟后Session自动失效,以分钟为单位-->
<session-timeout>15</session-timeout>
</session-config>

一般session默认的失效时间是30分钟,只要客户端一直在访问服务端,服务端就会对session进行维护更新,知道客户端不再访问浏览器了,记录最后一次访问的时间,以此开始计时失效的时间

public class SessionDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//解决乱码问题
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//得到Session
HttpSession session = req.getSession();
//给Session中存东西
session.setAttribute("name",new Person("张三",1));
//获取Session的ID
String sessionId = session.getId();
//判断Session是不是新创建
if (session.isNew()){
resp.getWriter().write("session创建成功,ID:"+sessionId);
}else {
resp.getWriter().write("session以及在服务器中存在
了,ID:"+sessionId);
}
//Session创建的时候做了什么事情;
// Cookie cookie = new Cookie("JSESSIONID",sessionId);
// resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
//得到Session
HttpSession session = req.getSession();
Person person = (Person) session.getAttribute("name");
System.out.println(person.toString());
HttpSession session = req.getSession();
session.removeAttribute("name");
//手动注销Session
session.invalidate();

以上是session的简单使用 ~~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安也有星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值