Cookie,Session

烈酒焚心 提交于 2020-02-07 00:14:50

Cookie,Session

会话

会话:用户打开一个浏览器,点击很多超链接,访问多个web资源,关闭浏览器,这个过程称之为会话。
有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话。
一个网站,怎么证明你来过?
客户端 服务端
1服务端给客户端一个Cookie一个信件,客户端下次访问服务端带上新建就行了。Cookie
2服务器登记你来过了,下次你来的时候我来匹配你。

保存会话的两种技术

Cookie
客户端技术 (响应,请求)
从请求中拿到cookie信息
服务器响应给客户端cookie
Session(重点)
服务器技术,利用这个技术,可以保存用户的会话信息,我们可以把信息或者数据放在Session中。
常见场景,登陆网站会记住你的登陆信息。第二次会直接登录上去。

Cookie

注意:
一个Cookie只能保存一个信息
一个web站点可以给浏览器发送多个Cookie,最多存放20个
Cookie的大小4KB
300个Cookie上限
乱码问题


        URLEncoder.encode("中文","utf-8");//编码
        URLDecoder.decode(cookie.getValue(),"utf-8");//解码

代码获取上次打开网站的时间

  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        //Cookie服务器端从客户端获取
        PrintWriter out = resp.getWriter();
        Cookie[] cookies = req.getCookies();//可能存在多个cookie
        if(cookies!=null)
        {
            //如果存在
                out.write("上次访问时间");
            for (Cookie cookie : cookies) {
                //获取cookie的名字
                String name = cookie.getName();
                if (name.equals("lastTime")) {
                    //获取cookie中的值


                    long l = Long.parseLong(cookie.getValue());
                    Date date = new Date(l);
                    out.write(date.toLocaleString());
                }
            }
        }else {
            out.write("第一次访问");
        }

        Cookie cookie = new Cookie("lastTime",System.currentTimeMillis()+"");
        cookie.setMaxAge(24*60*60);//设置一天的有效期
        resp.addCookie(cookie);


    }

Session

什么是Session
服务器会给每一个用户(浏览器)创建一个Seesion对象;
一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在
用户登录之后,整个网站都可以访问。->保存用户的信息 ;保存购物车的信息。。。
Session和Cookie区别
Cookie是吧用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
Session把用户的数据写道用户独占Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
Session对象的创建;

  HttpSession session = req.getSession();

        //给Session中存东西
        session.setAttribute("name",new Person("星星",1));

注销Session
手动

        session.removeAttribute("name");
       //手动注销session
        session.invalidate();

自动

    <!--设置Session的默认失效时间-->
    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>

使用场景
1保存一个登陆用户的信息
2购物车信息
3在整个网站中经常会使用的数据,保存在Session中

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!