为了账号安全,请及时绑定邮箱和手机立即绑定

Java篇-Session与Cookie

标签:
Java

一 : 会话技术

从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话,会话技术就是记录这次会话中客户端的状态与数据的.会话技术是帮助服务器记住客户端状态的.

二 : Cookie

Cookie 是将用户的数据存储到客户端的技术.

  • 服务器端将Cookie发送到客户端 :

cookie.setPath(" ")  如果不设置携带路径,那么该cookie信息会在访问产生该cookie的web资源所在的路径都携带cookie信息

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //创建COOKIE对象
        Cookie cookie = new Cookie("name", "jingjing");        //为cookie设置持久化时间,cookie信息在硬盘上存的时间
        cookie.setMaxAge(60*10);        //为cookie设置携带的路径//      cookie.setPath("/WEBpro/sendcook");//访问sendcookie资源时携带这个cookie
        
        //访问WEBpro下任何资源的时候都携带这个cookie
        cookie.setPath("/WEBpro");        
        //访问服务器下的所有资源都携带这个cookie//      cookie.setPath("/");
        
        //将cookie中有存储的信息发送到客户端
        response.addCookie(cookie);
    }
  • 服务器端接受客户端携带的Cookie :
    显示最后一次访问时间demo

//获得当前时间
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");        String time = format.format(date);        
        //创建cookie记录当前最新访问时间
        Cookie cookie = new Cookie("accessTime", time);
        cookie.setMaxAge(60*10);
        response.addCookie(cookie);        
        //获得客户携带的cookie
        String lastTime = null;
        Cookie[] cookies = request.getCookies();        if (cookies != null) {            for (Cookie cook : cookies) {                if (cook.getName().equals("accessTime")) {
                    lastTime = cook.getValue();
                }
            }
        }        //设置显示中文
        response.setContentType("text/html;charset=UTF-8");        if (lastTime == null) {
            response.getWriter().write("您是第一次访问,祝愉快");
        }else {
            response.getWriter().write("上次的访问时间是 : " + lastTime);
        }
    }
  • 删除客户端的cookie
    删除客户端存储的cookie信息,使用同名同路径的持久化时间为0的cookie进行覆盖.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    //删除客户端name:"..."的cookie信息
        Cookie cooie = new Cookie("name", "");        //将path设置与要删除的cookie path一致
        cooie.setPath("/WEBpro");        //设置时间是0
        cooie.setMaxAge(0);
        response.addCookie(cooie);
    }

三 : Session技术

Session技术是将数据存储在服务器端的技术,会为每一个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间. Session的实现是基于Cookie,Session需要借助Cookie存储客户端唯一标识JESSIONID

  • 获取Session对象
//创建属于该客户端(会话)私有的session区域
        /*
         * 内部判断该客户端是否在服务器已经存在session,如果客户端在服务器不存在session,那么创建一个
         * 新的session对象
         * 如果该客户端在服务器已经存在session,获得已经存在的session返回.
         * */
        HttpSession session = request.getSession();        String id = session.getId();

当浏览器关闭,Session并没有销毁,而是Cookie中保存的JESSIONID没有了,没有了这把钥匙,就无法在服务器中寻找对应的Session空间

  • 手动创建一个JSESSIONID的cookie,为该cookie设置持久时间
HttpSession session = request.getSession();
        String id = session.getId();        
        //回写前手动创建一个JSESSIONID的cookie,为该cookie设置持久时间
        Cookie cookie = new Cookie("JSESSIONID", id);
        cookie.setPath("/WEBpro/");
        cookie.setMaxAge(10*60);
        response.addCookie(cookie);
        session.setAttribute("name", "hello");
        response.getWriter().write(id);
  • Session域对象

Session 是一个域对象
有如下方法

session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
    //从session中获得存储数据
        HttpSession session = request.getSession();        String name = (String)session.getAttribute("name");
        response.getWriter().write(name);

四 : Session对象的生命周期

创建 :
第一次request.getSession()
销毁 :
① : 服务器关闭时(非正常)
② : session过期/失效(默认30分钟)
可以在web.xml中配置
超时时间是从不操作服务器端的资源开始计时.

<session-config>
       <session-timeout>30</session-timeout></session-config>

③ : 手动销毁session

session.invalidate();

五 :  session原理

每一个客户端(用户)对应服务器端一块内存区域.通过客户端存的编号(JSESSIONID)找寻相应的内存空间,如果找不到则创建新的.Cookie属于会话级别的,当一次会话结束时,cookie即可消失,所以想要保存cookie就要设置cookie的存活时间,而Session在服务器中存储,客户端关闭,并不会让Session消失.依然保存在服务端.

webp

原理



作者:TianTianBaby223
链接:https://www.jianshu.com/p/f07065587683


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消