JavaWeb-Cookie和Session

Cookie和Session区别:

  • 1、Cookie 在客户端(浏览器),Session 在服务器端。
  • 2、Cookie的安全性一般,他人可通过分析存放在本地的Cookie并进行Cookie欺骗。在安全性第一的前提下,选择Session更优。重要交互信息比如权限等就要放在Session中,一般的信息记录放Cookie就好了。
  • 3、单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie。
  • 4、Session 可以放在 文件、数据库或内存中,比如在使用Node时将Session保存在redis中。由于一定时间内它是保存在服务器上的,当访问增多时,会较大地占用服务器的性能。考虑到减轻服务器性能方面,应当适时使用Cookie。
  • 5、Session 的运行依赖Session ID,而 Session ID 是存在 Cookie 中的,也就是说,如果浏览器禁用了 Cookie,Session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 Session ID)。
  • 6、用户验证这种场合一般会用 Session。因此,维持一个会话的核心就是客户端的唯一标识,即Session ID。

Cookie

  • 从请求中拿到cookie信息
  • 服务器响应给客户端cookie
Cookie常用的方法
public class HelloDispatcher extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //新建一个cookie,并把当前系统时间作为cookie响应给客户端
        Cookie cookie = new Cookie("mycookie",System.currentTimeMillis()+"");
        cookie.setMaxAge(24*60*60);//设置cookie的有效期为一天
        resp.addCookie(cookie);//响应给客户端一个cookie
        
//---------------上面创建cookie,下面获取cookie---------------------------

        Cookie[] cookies = req.getCookies();//拿到的cookies是一个数组,数组里面的元素都是键值对
        for (Cookie cookie : cookies) {
            cookie.getName();//拿到数组中键值对的key ---       mycookie
            cookie.getValue();//拿到数组中键值对的value  ---   系统时间
        }
}
cookie.setMaxAge(0);//设置cookie的有效期为0,每次刷新,cookie就会被删除
Cookie cookie = new Cookie("mycookie",System.currentTimeMillis()+"");
//新建一个cookie,并用中文设置cookie的value
Cookie cookie = new Cookie("mycookie", "乾坤大挪移");
resp.addCookie(cookie);//响应给客户端一个cookie
//------------------------------------------------
//如果在浏览器上乱码(在已设置setCharacterEncoding("utf-8")的情况下),可以使用URLEncoder.encode编码,
Cookie cookie = new Cookie("mycookie", URLEncoder.encode("乾坤大挪移","utf-8"));
resp.addCookie(cookie);//响应给客户端一个cookie
//---------------------------------------------------
//想要拿到浏览器cookie的中文value,可以先拿到Cookie数组,再用URLDecoder.decode对每一个键值对的value进行解码
URLDecoder.decode(cookie.getValue(),"utf-8");

Session(重点)

什么是session?

  • 服务器会给每一个用户(浏览器)创建一个Session对象
  • 一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就一直存在
  • 用户登录一个网站后,网站内的其他页面也可以以登录的状态访问(保存用户信息)
Session常用的方法
public class HelloSession extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //获得Session
        HttpSession session = req.getSession();
        //给Session里面存信息,对象(类)要自己创建并定义属性:Person(id,name,paaword)
        session.setAttribute("person",new Person(007,"乾坤大挪移","1213141516"));
        //获取Session的ID,一般通过SessionID判断是不是同一个Session
        String sessionId = session.getId();
        //判断Session是不是新创建的
        session.isNew();
        }
  • 由于Session是放在服务器上的,所以获取Session不需要获取上下文
        //获取session里面存入的指定对象
        Person person = (Person) session.getAttribute("person");
        //打印person对象
        System.out.println(person.toString());
        //把之前存进去的session清除,手动注销session
        session.removeAttribute("person");
        //注销session,但是会立马生产一个新的
        session.invalidate();
  • 上面的手动注销可以用于用户手动注销,下面的到时注销,可用于网站的Session保存策略
  <!--会话自动过期设置,在web.xml中设置-->
  <!--设置Session的失效时间:以分钟为单位-->
  <session-config>
    <!--15分钟后自动失效-->
    <session-timeout>15</session-timeout>
  </session-config>

使用场景:

  • 保存一个用户登录的信息
  • 购物车信息
  • 在整个网站中经常会使用的数据,保存在session中(保存重要信息,减少服务器资源浪费)

总结:

Cookie

在这里插入图片描述

Session

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值