• COOKIE的SECURE属性


    昨天跑了一下测试,发现服务器明明向客户端写了COOKIE,而且浏览器也木有禁用COOKIE,但是从浏览器再访问服务器,SessionID死活不会传到服务器。搞了一个上午,找不到原因,正在焦头烂额的时候,一个前辈帮了大忙。原来我的访问URL协议头是HTTP,而Weblogic里面的配置被人改动了。把cookie-secure的值改为了truetrue意味着"指示浏览器仅通过 HTTPS 连接传回 cookie。这可以确保 cookie ID 是安全的,且仅用于使用 HTTPS 的网站。如果启用此功能,则 HTTP 上的会话 Cookie 将不再起作用。"唉,明白了,怪不得一直都取不到COOKIE。

    好了,问题解决了,下面我自己再实验一下:

    我自己的电脑用的Tomcat,首先,把cookie-secure的值设为false,创建一个session:

     1 public void service(HttpServletRequest request, HttpServletResponse response) {
     2         // 创建cookie
     3         Cookie cookie = new Cookie("key", "value");
     4         // 关键地方:cookie设为false
     5         cookie.setSecure(false);
     6         response.addCookie(cookie);
     7         // 从request中取得cookie,并输出
     8         Cookie[] cookies = request.getCookies();
     9         for (Cookie c : cookies) {
    10             System.out.println(c.getValue());
    11         }
    12         RequestDispatcher dispatcher = request
    13                 .getRequestDispatcher("index.jsp");
    14         try {
    15             dispatcher.forward(request, response);
    16         } catch (ServletException e) {
    17             e.printStackTrace();
    18         } catch (IOException e) {
    19             e.printStackTrace();
    20         }
    21     }

    好,我们访问一下这个地址:http://localhost:8080/servlet/index.do

    用Fiddler来看一下客户端发出的信息:

    好,我们再访问一下前面的地址:

    这个时候我们可以看到客户端发出的cookie里面,有key=value,说明客户端把cookie发给了服务器端。

    那如果我们在服务器端设置cookie.setSecure(true)呢?

    先上代码:

     1 public void service(HttpServletRequest request, HttpServletResponse response) {
     2         // 创建cookie
     3         Cookie cookie = new Cookie("key", "value");
     4         // 关键地方:cookie设为false
     5         cookie.setSecure(true);
     6         response.addCookie(cookie);
     7         // 从request中取得cookie,并输出
     8         Cookie[] cookies = request.getCookies();
     9         if (cookies != null) {
    10             for (Cookie c : cookies) {
    11                 System.out.println(c.getValue());
    12             }
    13         }
    14         RequestDispatcher dispatcher = request
    15                 .getRequestDispatcher("index.jsp");
    16         try {
    17             dispatcher.forward(request, response);
    18         } catch (ServletException e) {
    19             e.printStackTrace();
    20         } catch (IOException e) {
    21             e.printStackTrace();
    22         }
    23     }

    第一次访问:

    这是request的信息。

    服务器的返回信息如下:

    我们可以看到服务器发给客户端的信息中有这么一行:Set-Cookie:key=value; Secure

    多了一个Secure。

    第二次访问:

    我们发现key=value这个cookie已经没有了。

    那我们用https协议头来试着访问一下看看:

    我们看到key=value又发给了服务器端了。

    唉,其实这些都是基础知识了,看来自己的只是还是很薄弱。继续努力吧。

  • 相关阅读:
    BZOJ1999或洛谷1099&BZOJ2282或洛谷2491 树网的核&[SDOI2011]消防
    BZOJ1912或洛谷3629 [APIO2010]巡逻
    CH6202 黑暗城堡
    POJ2728 Desert King
    JoyOI1391 走廊泼水节
    洛谷1073 最优贸易
    POJ3662或洛谷1948 Telephone Lines
    BZOJ1106 [POI2007]立方体大作战tet
    ubuntu 16.04 安装genymotion
    ubuntu下搭建android开发环境核心篇安装AndroidStudio、sdk、jdk
  • 原文地址:https://www.cnblogs.com/huashui/p/3180528.html
Copyright © 2020-2023  润新知