zoukankan      html  css  js  c++  java
  • cookie和session

    参考资料及API:http://www.cnblogs.com/xdp-gacl/tag/JavaWeb%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93/

    浏览器只能操作cookie,服务端既可以操作cookie,也可以操作session。原则上浏览器会将本地保存的cookie值在发送请求时携带上,携带标准是根据“域+路径“确定,且出于安全考虑,不允许跨域携带。区分是否是同一个域由协议+ip+端口确定。

    1、会话,理解为浏览器的一次打开和关闭操作。

      

        上述截图中的域和路径决定了该cookie适用的请求URL。过期时间为:浏览会话结束时(浏览器关闭时)。

    2、Cookie技术

    Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,在一次会话尚未结束时,(若如果设置了cookie的存活时间,那么即使会话结束,在cookie的有效期内,浏览器会依据域和路径的组合,去本地磁盘上匹配已保持的cookie,一并发送给服务器)浏览器会将缓存中的cookie以请求头中参数的形式发送给web服务器,实现请求状态的标记。

    在上面的截图中可以发现,虽然设置了一个名字为date失效期为21天的cookie,但并不会在访问百度这个域时发送这个cookie。证明了cookie的发送会经过域和路径的一个筛选

    在谷歌浏览器上可以查看该浏览器保存的所有的cookie:

     3、验证cookie的创建和刷新。

     codeview:

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.*;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Date;
    
    
    @WebServlet(urlPatterns={"/test/cookie"})
    public class CookieTest extends HttpServlet
    {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
        {
            resp.setCharacterEncoding("utf-8");
            resp.setHeader("content-type","text/html;charset=utf-8");
            PrintWriter out = resp.getWriter();
    
            // 获取请求中的cookie
            Cookie[] cookies = req.getCookies();
            
            if (null != cookies)
            {
                for (Cookie temp : cookies)
                {
                    if ("date".equals(temp.getName()))
                    {
                        out.print(" 浏览器保存的名为date的cookie:"+temp.getValue());
                    }
                }
            }
            else
            {
                out.print("你是第一次访问该网站");
    
            }
    
            //实现cookie的刷新
            Cookie cookie = new Cookie("date",new Date().toLocaleString());
            resp.addCookie(cookie);
    
            /*
            PrintWriter out = resp.getWriter();
            HttpSession session = req.getSession();
            String ID = session.getId();
    
            Cookie cookie = new Cookie("date","This is cookie ");
            // 设置cookie存活的时间,设置了存活时间,不会应为会话的结束而失效.
            cookie.setMaxAge(30*60*1000);
            resp.addCookie(cookie);
            */
        }
    }

    4、

    session为服务端技术,web服务器可以为一个浏览器创建一个会话对象(session对像),一个浏览器独占一个session对象(默认情况下),。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

    • Cookie是把用户的数据写给用户的浏览器。
    • Session技术把用户的数据写到用户独占的session中。
    • Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
    • 服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。

  • 相关阅读:
    Flask中路由系统、Flask的参数及app的配置
    linux之master和minion
    linux之docker学习
    项目的发布(nginx、uwsgi、django、virtualenv、supervisor)
    Linux下安装和使用nginx
    linux下主从同步和redis的用法
    论图像识别的预处理技术
    图像技术分析 图像编辑器核心技术
    C++ Primer 第九章 顺序容器
    图像灰度化公式 颜色空间用途说明
  • 原文地址:https://www.cnblogs.com/nevegiveup/p/7445612.html
Copyright © 2011-2022 走看看