Cookie和Session

相同点:

两者都用来跟踪客户端身份

不同点:

1、数据存储位置:cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、安全性:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

3、服务器性能:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4、数据大小:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、信息重要程度:可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

注意:

Cookie:

  1. Cookie有效期时间设为0的话每次关闭会话就清除Cookie
  2. 一个Cookie只能保存一个信息(一个键值对)
    Cookie c=new Cookie(String,String)
  3. 浏览器Cookie有上限(300)
    Cookie把数据写给浏览器,浏览器来保存
  4. 第一次访问,服务器给用户发送一个cookie,下次访问时携带cookie访问,便知道是否首次访问
    在这里插入图片描述
package com.csf.Cookie;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @ClassName Cookie1
 * @Author 陈世枫
 * @Date 2022/1/23 15:57
 * @Version 1.0
 **/
public class Cookie1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        PrintWriter out = resp.getWriter();
        Cookie[] cookies = req.getCookies();;
        if (cookies!=null){
            out.println("欢迎你再次访问本网站,您上次访问时间为:");
            for (int i=0;i<cookies.length;i++){
                if (cookies[i].getName().equals("LastLoginTime")){
                    out.println(cookies[i].getValue());
                }
            }
        }else {
            out.println("您首次登录本网站");
        }
        Cookie c=new Cookie("LastLoginTime",System.currentTimeMillis()+"");
        resp.addCookie(c);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

Session:

  1. 服务器会给每一个用户(浏览器)分配一个Session对象,给一个唯一不变(再关闭会花前)的ID(服务器创建
  2. 可通过Maven配置session失效时间,分钟为单位
  3. Session把用户数据写道Session中,服务器保存
  4. 访问服务器是登记SessionID,返回给用户,存储东西时用服务器中的Session,所以不同用户中的ID不同所看到的存储数据也不同
    在这里插入图片描述
	 req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");

        HttpSession session = req.getSession();
        session.setAttribute("name","lqt");	 	由session写入数据
        PrintWriter writer = resp.getWriter();
        if (session.isNew()){
            writer.println("已经创建了ID:"+session.getId());
        }else {
            writer.println("创建了ID:"+session.getId());
        }

		String name = (String) session.getAttribute("name"); 		获得键值对的值
        PrintWriter writer = resp.getWriter();
        writer.println(name);
        
        String name = (String) session.getAttribute("name");
        session.removeAttribute(name);		移除相应的键值对
        session.invalidate();				手动关闭Session
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值