Cookie、Session

文章讲述了Web会话的概念,包括无状态会话和有状态会话。重点讨论了两种主要的会话管理技术——Cookie和Session。Cookie是客户端技术,通过在浏览器存储数据来识别用户,而Session是服务器端技术,为每个用户创建独立的对象来保存数据。同时提到了删除Cookie的方法和Session的失效方式,以及两者的区别,强调Session保存的数据更为私有。
摘要由CSDN通过智能技术生成

会话:用户打开一个浏览器,点了很多超链接,访问多个web,关闭浏览器,这个过程可以称之为会话。

有状态会话:客户端访问服务端,下次再访问服务端,服务端就会知道该用户曾经来过。

怎么证明一个网站曾经来过?

1.当客户端访问服务端时,服务端给客户一个cookie,客户端下次访问服务端带上cookie就行了。

2.服务器登记你来过滤。下次你来的时候我来匹配你。(session)

保存会话的两种技术

Cookie

客户端技术

1.从请求中获取Cookie

2.服务器响应给客户端Cookie

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码
        resp.setCharacterEncoding("utf-8");
        //获取请求中的 cookies
        Cookie[] cookies = req.getCookies();
        //获取响应的打印流
        PrintWriter writer = resp.getWriter();
        //如果Cookie不为空
        if(cookies.length!=0){
            for(int i=1;i<cookies.length;i++){
                //查询Cookie的key
                if(cookies[i].getName().equals("name")){
                    //获取Cookie的value
                    String value = cookies[i].getValue();
                    writer.write("the last time of logging is:"+new Date(Long.parseLong(value)));
                    break;
                }
                if(i==cookies.length-1){
                    //不存在该Cookie
                    writer.write("you never have logged in this web");
                }
            }
        }
        //设置新的cookie
        Cookie cookie = new Cookie("name", String.valueOf(System.currentTimeMillis()));
        //设置过期时间
        cookie.setMaxAge(60*60*24);
        //响应给客户端Cookie
        resp.addCookie(cookie);

    }

 cookie:一般保存在本地的 用户目录下appdata目录;

删除Cookie方法:1.不设置有效期,关闭浏览器,自动失效。2,设置有效期时间为0。

Session

服务器技术

什么是Session:1.服务器会给每一个用户(浏览器)创建一个Session对象。2.一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在。3.用户登录之后,整个网站他都可以访问!

设置Session

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        //获取Session
        HttpSession session = req.getSession();
        //获取SessionId
        String id = session.getId();
        //给Session设置属性值
        session.setAttribute("username","shenyc");
        //判断session是不是新创建的
        if(session.isNew()){
            resp.getWriter().write("new Session id is "+id);
        }else {
            resp.getWriter().write("Session has been cereated, id is "+id);
        }

        //浏览器打开,Session创建时做了哪些操作
        //Cookie cookie=new Cookie("JSESSIONID",id);
        //resp.addCookie(cookie);
    }

取Session的值

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //获取Session
        HttpSession session = req.getSession();
        String username = (String) session.getAttribute("username");
        System.out.println(username);
    }

跨Servlet之前用的是ServletContext,现在使用Session

ServletContext(ApplicationContext)中的数据是共享的,Seessioo中存放的数据是私有的。

 Session失效方法

1.在xml文件中设置

<!--    在Web.xml中设置Session默认的失效时间-->
    <session-config>
<!--        15分钟后Session自动失效-->
        <session-timeout>16</session-timeout>
    </session-config>


2.使用session的invalidate()方法注销。

Cookie和Session区别

Cookie是把用户的数据写到用户的浏览器请求中,浏览器保存。

Session把用户的数据写到用户独占的Session,而Session在服务端保存,根据独有的SessionId获取其中的数据。

Session对象由服务器创建,我们把在整个网站经常会使用的数据,将他保存在Session中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值