JavaWeb-Cookie+Session

Cookie+Session

cookie是监视器,session是会话

  1. 存储位置不同: cookie是保存在客户端(浏览器), session是保存服务器端 2. 存储数据量大小不同: cookie存储是有限的, 不超过4KB, seesion是无限制的;

Cookie就是饼干!很好理解的,就是你第一次访问我我会拦截你,然后我给你分一块饼干,当你有了这个饼干就相当于有了一个令牌,以后访问不会拦截你。

会话

会话:用户打卡一个浏览器,点击很多超链接,访问跟web资源,关闭浏览器

服务点给客户端一个cookie,下次访问带上cookie

服务器等级来过了,之后直接进行匹配。

有状态会话:下次访问,知道之前访问过。

保存会话的技术

cookie是保存在客户端(响应,请求),只能存储String,没有object

session是保存服务器端(保存会话信息),将数据或者信息放在Session中。(网站记录用户信息,下次不用登录就可以访问信息)

demo是演示,domain是域,daemon才是守护

Cookie

  • 从请求中拿到cookie的信息
  • 服务器响应给客户端cookie
  • cookie.getName() 获取cookie的key
  • 一般保存在本地用户目录的appdata下
  • 一个web站点可以存放最多20个cookie,cookie大小为4kb,300个cookie浏览器上限。
  • 不设置有效期,关闭浏览器,cookie自动失效; 或者设置cookie有效期时间为 0

实例:客户端上一次访问时间

req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setHeader("Content-type","text/html;charset=utf-8"); // 乱码就设置一下
PrintWrite = resp.getWrite();
// Cookie 服务器端从从客户端获取
Cookie[] cookies = req.getCookies();
// 判断Cookie是否为空
if (cookies!=null){
         out.write("xxx");
    for (int i = 0; i < cookies.length; i++){
        Cookie cookie = cookies[i];
        if ("lastLoginTime".equels(cookie.getName())){//用name.equals能避免空指针异常
            // 获取cookie中的值
            long l = Long.parseLong(cookie.getValue();)
            Dare date = new Date(l);
            out.write(date.toLocaleString());
        }
    }
    }else{
    out.write("xxx");
}
// 服务器给客户端响应一个cookie
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
// cookie是一个类,因此cookie的getName方法就是存放在cookie中数据的key

cookie.setMaxAge(24*60*60) // cookie有效期为1天

resp.addCookies(cookie);

中文乱码:

// 编码
URLEncoder.encode("你","UTF-8"));
// 解码
URLDecoder.decode(cookie.getValue(),"UTF-8"));

Session重点

服务器给每一个用户(服务器)创建一个Session对象,session就是存储在服务器,Session把用户的数据写到用户独占Session中,服务器端保存 (保存重要的信息,减少服务器资源的浪费)

一个Session独占一个浏览器,用户先访问服务器,服务器给用户返回一个sessionId,通过cookie传递。

用户登录之后,整个网站都可以访问,保存用户信息

// 得到Session
HttpSession session = req.getSession();
// session存对象,东西
session.setAttribute("name", "xx");
session.setAttribute("object", new Person("xx", 1);
// 获取sessionID
String sessionid = session.getId();
// 判断Session是不是新创建
if (session.isNew()){
    resp.getWriter().write("ID:"+ sessionid);
}else{
    resp.getWriter().write("ID已经存在:"+ sessionid);
    //session之所以存在了,是因为tomcat启动的时候自动访问了该站点,所以就已经存在了,session其实是浏览器访问此服务器任何一个页面的时候都自动创建的,所以你访问了其他页面后,在访问session页会发现已存在
}
HttpSession session = req.getSession();
String name = session.getAttribute("name");
Person person = session.getAttribute("object");
session.removeAttribute("name");
// 手动注销session
session.invalidate();
<session-config>
   <!--会话自动过期,以分钟为单位-->
   <session-timeout>15</session-timeout>
</session-config>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值