• session和cookie


    session客户端缓存,cookie服务端缓存

    session翻译为会话

    cookie翻译为饼干

    session会话:

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

    有状态会话:  一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话

    一个网站,怎么证明你来过?

    客户端    服务端

      1.服务端给客户端一个饼干,客户端下次访问服务端带上饼干就可以了; cookie

      2.服务器登记你来过了,下次你来的时候我来匹配你; session

    (第一次登记 下一次直接报名字)

    当用户访问 web 页面时,他的名字可以记录在 cookie 中。 在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录

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

    保存会话的两种技术
    cookie

      客户端技术(响应,请求)
        `在服务器上怎么才能把东西发给客户端  通过响应

        `客户端怎么把他带到服务器上  通过请求

    session

      服务器技术,利用这个技术,可以保存用户的会话信息,我们可以把信息或者数据放在Session中!

    常见场景:网站登录之后,你下次不用再登录了,第二次访问直接就上去了!

    记住密码就能默认登录记录cookie

    Cookie和Session区别

    1. 存储位置不同: cookie是保存在客户端, session是保存服务器端

    2. 存储数据量大小不同: cookie存储是有限的, 不超过4KB, session是无限制的;

    3.存储的数据类型不同:cookie只能存储键值对的字符串类型,而session可以存储任意类型

    4.默认有效期不同:cookie默认是会话级别的cookie,而session默认有效期是30分钟

    cookie 一般都是key value的形式

     每次访问都会给你一个小饼干,有了给你更新

    Cookie

    1.从请求中拿到cookie信息

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

    Cookie[] cookies = req.getCookies();//获得cookie
    cookie.getName();//获得cookie中的key
    cookie.getValue();////获得cookie中的vlaue
    Cookie cookie = new Cookie("Time",System.currentTimeMillis()+"");//新建一个cookie
    cookie.setMaxAge(24*60*60);//设置cookie的有效期
    resp.addCookie(cookie);//响应给客户端一个cookie

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

    代码练习:

       @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //服务器,告诉你,你来的时间,把这个时间封装成为一个信件,你下带来,我就知道你来了
    
       //解决中文乱码
            req.setCharacterEncoding("utf-16");
            resp.setCharacterEncoding("utf-16");
    
            //客户端返回一些字符串
            PrintWriter out = resp.getWriter();//out是JSP的内置对象
    
            //Cookie,服务器端从客户端获取
            Cookie[] cookies = req.getCookies();//这里返问数组。说明cookie可能存在多个
            //判断Cookie是否存在
            if(cookies!=null){
                //如果存在
                out.write("您上次访问是时间是:");
                for (int i = 0; i < cookies.length; i++) {
                    Cookie cookie = cookies[i];
                    //获取cookie的名字
                    if(cookie.getName().equals("Time")){
                        //获取cookie中的值
                        long Time = Long.parseLong(cookie.getValue());
                        Date date = new Date(Time);
                        out.write(date.toLocaleString());
                    }
    
                }
            }//服务器给客户端响应一个cookie
            Cookie cookie = new Cookie("Time",System.currentTimeMillis()+"");
            //给cookie设置有效期(在此设置的有效期是一天)
            cookie.setMaxAge(24*60*60);
            resp.addCookie(cookie);
        }

    运行测试:

     一个网站cookie是否存在上限?

      一个Cookie只能保存一个信息;

      一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;

      Cookie大小有限制4kb;

      300个cookie浏览器上限

    删除Cookie;

      不设置有效期,关闭浏览器,自动失效;

      设置有效期时间为0;

        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //创建一个cookie,名字必须要和要删除的名字一致
            Cookie cookie = new Cookie("Time",System.currentTimeMillis()+"");
            //将cookie有效期设置光0,立马过期
            cookie.setMaxAge(0);
            resp.addCookie(cookie);
        }

    编码解码

     URLEncoder.encode("中文","utf-8")
     URLDecoder.decode(cookie.getValue(),"utf-8")
  • 相关阅读:
    关于DataGrid最后一页只有一行记录时,删除此记录出错的问题
    数据库开发个人总结(ADO.NET小结)
    MSSQL server数据库开发精典技巧
    愈强愈勇(奥运六星)
    中国与日本的生活对比 转)
    古龙妙语录
    DataGrid单击行时改变颜色
    VS.NET 2003 控件命名规范
    qt国际化
    Histogram matching using python, opencv
  • 原文地址:https://www.cnblogs.com/nuliyao123/p/14423058.html
Copyright © 2020-2023  润新知