Session、Cookie

本文详细介绍了JAVAweb中Session和Cookie的概念及区别。Session是服务器端保存用户信息的技术,而Cookie则在客户端存储数据。两者常用于实现登录状态的保持。Session适合保存重要信息,Cookie通常限制为4KB且数量有限。此外,文章还展示了如何在JAVAweb应用中操作Session和Cookie的示例代码,包括创建、获取、删除Session对象和Cookie。
摘要由CSDN通过智能技术生成

JAVAweb

七、Session、Cookie

1、会话

Cookie通过在客户端记录信息确定用户身份Session通过在服务器端记录信息确定用户身份

有状态会话:每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。

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

  • 服务端给客户一个信件,客户端下一次访问服务端的时候带上信件就可以了: cookie
  • 服务器登记你来过了,下次你来的时候匹配你:session
2、保存会话的两种技术
cookie
  • 客户端技术(响应、请求)
session
  • 服务器技术,利用这个技术,可以保存用户的会话信息,我们可以把信息或者数据放在session中;
常见例子:登录网页后下次访问不用登录;
3、Cookie
  • 从请求中拿到cookie信息;
  • 服务器响应给客户端cookie;
Cookie[] cookies = req.getCookies(); //获得Cookie
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie

cookie知识补充:

  • 一个Cookie只能保存一个信息;
  • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;
  • cookie大小有限制4kb;
  • 300个cookie浏览器上限;

删除cookie

  • 不设置有效期,关闭浏览器,自动删除
  • 设置有效期为0;

编码解码

 		URLDecoder.decode(cookie.getValue(),"utf-8");
        Cookie cookie = new Cookie("name", URLEncoder.encode("马龙","utf-8"));
4、Session
什么是Session:
  • 服务器会给每一个用户(浏览器)创建一个Session对象;
  • 一个Session独占一个浏览器,只要·浏览器没有关闭,这个Session就存在;
  • 用户登录后,整个网站他都可以访问,包括用户个人信息页面、投稿等;——》保存了用户的·信息
Session和cookie的区别:
  • session中保存的是对象,cookie中保存的是字符串

  • Cookie把用户的数据写给用户的浏览器,浏览器保存(客户端保存),可以保存多个;

  • Session把用户的数据写给服务器,由服务器保存,用来保存重要的信息,减少服务器资源的浪费;

  • Session对象由服务创建;

使用场景:
  • 保存一个登录用户的信息;
  • 购物车信息;
  • 在整个网站中经常会使用到的数据,保存在session中;
Session的应用:
  • 在web.xml中可以设置session失效时间,默认最大不活动时间:30分钟
 	<!--设置session默认的失效时间-->
    <session-config>
        <!--单位为分钟,以下为十分钟后session失效-->
        <session-timeout>10</session-timeout>
    </session-config>
  • 向session中存对象
@WebServlet(name = "session" , urlPatterns = "/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中存Person实体对象
        Person p1 = new Person("马龙","帝国破坏龙",33);
        Person p2 = new Person("张继科","帝国绝凶虎",33);
        Person p3 = new Person("许昕","帝国食鲸鲨",30);
        session.setAttribute("info1",p1);
        session.setAttribute("info2",p2);
        session.setAttribute("info3",p3);

        //获取session的id
        String sid = session.getId();

        //判断Session是不是新创建的
        if(session.isNew()){
            resp.getWriter().write("session创建成功,id:"+sid);
        }else {
            resp.getWriter().write("session已经在服务器中存在,id:"+sid);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
  • 得到session的对象
@WebServlet(name = "s2",urlPatterns = "/s2")
public class SessionDemo02 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的值

        Person info = (Person) session.getAttribute("info1");
        System.out.println(info);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
  • 移除session中的对象以及注销session
@WebServlet(name = "s3",urlPatterns = "/s3")
public class SessionDemo03 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.removeAttribute("info1");
        //注销Session
        session.invalidate();



    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值