Cookie,Session

Cookie,Session

7.1会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话。

有状态会话:一个同学来个教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话。

你能怎么证明你是西开的学生?

你 西开

发票,学校登记

一个网站,怎么证明你来过?

客户端 服务端

  1. 服务端给客户端一个信件,客户端下次访问客户端带山信件就可以了。Cookie
  2. 服务器登记你来过,下次来的时候我来匹配你。Session

7.2保存会话的两种技术

Cookie

  • 客户端技术(响应,请求)

Session

  • 服务器技术,利用这个技术,可以保存用户的会话信息。我们可以把信息或者数据存放在Session中。

常见案例:网站登录之后,下次你就不用再登录了,第二次访问就直接上去了。

7.3Cookie

  1. 从请求中拿到cookie信息.
  2. 服务器响应给客户端cookie.
Cookie[] cookies=req.getCookies();//获得cookie
cookie.getName();//获得cookie中的key
cookie.getValue();//获得cookie中的value
new Cookie("lastLoginTime",System.currentTimeMillis()+"");//新建一个cookie
cookie.setMaxAge(24*60*60);//设置cookie有效期
resp.addCookie(cookie);//

cookie:一般会保存再本地的用户目录下appdata

一个网站cookie是否存在上限。聊聊细节问题

  • 一个cookie只能保存一个信息。

  • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie。

  • cookie大小有限制4kb.

  • 300个cookie浏览器上限。

删除cookie:

  • 不设置有效期,关闭浏览器,自动失效。
  • 设置有效期时间为0.

编码解码:

URLEncoder.encode("秦将","utf-8")
URLDecoder.decode(cookie.getValue()."utf-8")

7.4Session(重点)

什么是Session:

  • 服务器会给每一个用户(浏览器)创建一个Session对象。

  • 一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在。

  • 用户登录之后,整个网站都可以访问。保存用户的信息,保存购物车的信息。

Session和cookie的区别:

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

使用场景:

  • 保存一个登录用户的信息。
  • 购物车信息。
  • 在整个网站经常使用的数据,我们将它保存在session中。
public class SessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码
        resp.setCharacterEncoding("utf-8");
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //得到Session
        HttpSession session = req.getSession();
        //Session中存东西
        session.setAttribute("name","秦将");
        //获取Session的ID
        String id=session.getId();
        //判断Session是不是新创建的
        if (session.isNew()){
            resp.getWriter().write("Session创建成功,ID:"+id);
        }else {
            resp.getWriter().write("Session已经在服务器中存在了,ID"+id);
        }
    }

    private String id;
    // Session创建的时候做了什么事情
//    Cookie cookie=new Cookie("JSESSIONID", null);
//    resp.addCookie(cookie);
public class SessionDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码
        resp.setCharacterEncoding("utf-8");
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //得到Session
        HttpSession session = req.getSession();
        Person person=(Person)session.getAttribute("name");
        System.out.println(person.toString());
    }
public class SessionDemo03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        session.removeAttribute("name");
        //手动注销session
        session.invalidate();
    }

会话自动过期:web.xml配置

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

本文作者:努力的小L

本文链接:https://www.cnblogs.com/sx-xiaoL/p/17556643.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   努力的小L  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开