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为之服务。

  • 相关阅读:
    扫面线模板
    (动态规划、栈)leetcode 84. Largest Rectangle in Histogram, 85. Maximal Rectangle
    tmux 常见命令汇总
    leetcode 221
    leetcode 319 29
    (贪心)leetcode 392. Is Subsequence, 771. Jewels and Stones, 463. Island Perimeter
    leetcode 982 668
    Python import 同文件夹下的py文件的函数,pycharm报错
    Windows里Anaconda-Navigator无法打开的解决方案
    Windows下 gpu版 Tensorflow 安装
  • 原文地址:https://www.cnblogs.com/nevegiveup/p/7445612.html
Copyright © 2011-2022 走看看