使用Cookie时导致的问题之基础拓展--setDomain、setPath和localhost与127.0.0.1的区别和cookie与session的区别

前言:设置cookie时,使用以下代码我通过127.0.0.1访问系统时,一直拿不到cookie设置的值,由此引发了一系列的基础知识学习。

    /**
     * 设置Cookie的值,并使其在指定时间内生效
     *
     * @param cookieMaxage cookie生效的最大秒数
     */
    private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
                                          String cookieName, String cookieValue, int cookieMaxage, String encodeString) {
        try {
            if (cookieValue == null) {
                cookieValue = "";
            } else {
                cookieValue = URLEncoder.encode(cookieValue, encodeString);
            }
            Cookie cookie = new Cookie(cookieName, cookieValue);
            if (cookieMaxage > 0) {
                cookie.setMaxAge(cookieMaxage);
            }
            /*
            * 正常的Cookie只能在一个应用中访问,即cookie只能由创建他的应用访问要实现跨应用访问cookie或者跨域访问cookie就得使用到cookie的setPath()和setDomain()方法。
                1.同一服务器内的cookie共享方法:setPath()
                2.跨域共享cookie的方法:setDomain()
            */
            if (null != request) {// 设置域名的cookie
                String domainName = getDomainName(request);
                System.out.println(domainName);
                if (!"localhost".equals(domainName)) { 
                    cookie.setDomain(domainName);
                }
            }
            cookie.setPath("/");
            response.addCookie(cookie);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。

1.可在同一应用服务器内共享方法:设置cookie.setPath(“/”);
本机tomcat/webapp下面有两个应用:cas和webapp_b,

  • 1)原来在cas下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。
  • 2)若在cas下面设置cookie的时候,增加一条cookie.setPath(“/”);或者cookie.setPath(“/webapp_b/”);就可以在webapp_b下面获取到cas设置的cookie了。
  • 3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此cookie.setPath(“/”);之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath(“/webapp_b/”);是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的cas应用也不可以。
  • 4)设置cookie.setPath(“/webapp_b/jsp”)或者cookie.setPath(“/webapp_b/jsp/”)的时候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得cookie。
  • 5)设置cookie.setPath(“/webapp_b”);,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用cas下面获取cookie了
  • 6)有多条cookie.setPath(“XXX”);语句的时候,起作用的以最后一条为准。
  • 6)设置多个path的方法???

2.跨域共享cookie的方法:设置cookie.setDomain(“.jszx.com”);
A机所在的域:home.langchao.com,A有应用cas
B机所在的域:jszx.com,B有应用webapp_b

  • 1)在cas下面设置cookie的时候,增加cookie.setDomain(“.jszx.com”);,这样在webapp_b下面就可以取到cookie。
  • 2)这个参数必须以“.”开始。
  • 3)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080/webapp_b,可以获取cas在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/webapp_b则不可以获得cookie。
  • 4)设置了cookie.setDomain(“.jszx.com”);,还可以在默认的home.langchao.com下面共享。

3.localhost与127.0.0.1的区别

  • 1)原理不同

    • localhot的原理是不经网卡传输,不会受到网卡协议的限制。设置程序时本地服务用localhost,localhost不会解析成IP,也不会占用网卡、网络资源。
    • 127.0.0.1的原理是经过网卡传输的,依赖网卡协议,并受到网卡相关协议的限制。使用IP访问的时候,等于本机是通过网络再去访问本机,会涉及到网络用户的权限。
  • 2)概念不同

    • localhost:也可以叫是local,正确的解释是:本地服务器的意思。它可以被配置为任意的IP地址可以通过hosts这个文件进行更改,不过通常情况下都指向:127.0.0.1
    • 127.0.0.1:在windows系统的正确解释是:本机地址的意思。127.0.0.1是保留地址之一,用来检验本机TCP/IP协议栈,可以Ping回送地址。如果回送地址Ping不通,就说明IP堆栈出了故障。如果通的话,表明网络出了问题。
  • 3)指向不同

    • localhost 是一个保留域名(RFC 2606) ,为了避免同狭义定义主机名混淆而单独列出。它不仅指向 127.0.0.1 这个IP地址,它同时还可以指向ipv6 的地址 。
    • 127.0.0.1 是回送地址,指本地机,测试使用。回送地址(127.x.x.x)是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。
      在这里插入图片描述
      在这里插入图片描述
  • 4)扩展资料:

    • 整个127.* 网段通常被用作 loopback 网络接口的默认地址,按惯例通常设置为 127.0.0.1。这个地址在其他计算机上不能访问,就算你想访问,访问的也是自己,因为每台带有TCP/IP协议栈的设备基本上都有 localhost/127.0.0.1。
    • 本机地址通常指的是绑定在物理或虚拟网络接口上的IP地址,可供其他设备访问到。
      最后从开发度来看,localhost是个域名,性质跟 “www.baidu.com” 差不多。不能直接绑定套接字,必须先gethostbyname转成IP才能绑定。
    • 127.0.0.1 是绑定在 loopback 接口上的地址,如果服务端套接字绑定在它上面,你的客户端程序就只能在本机访问。

4.cookie与session的区别

  • 1)cookie

    • cookie是在服务端创建
    • cooki是保存在浏览器这一端
    • cookie的生命周期可以通过 cookie.setMaxAge(2000);(如果不设置生命周期,cookie的生命周期当浏览器关闭时就消亡)
    • cooki可以被多个浏览器共享
    • 一个web应用可以保存多个cookie。但保存在同一个cookie文本在客户端浏览器下。
    • cookie存放时候是以明文方式存放,因此安全性较低,可以通过加密后存放。
    • 每次请求会携带与当前服务相关的键值对数据,cookie明文显示数据,用户可以知道cookie,数据存储在浏览器中容易被暴露,被获取,不存敏感数据
  • 2)什么是seession:

    • session是存放在服务器的内存中。
    • 一个用户的浏览器。,独享一个session域对象
    • session中属性默认的生命周期是30分,可以通过html文件来修改
    • 服务器能够为不同的浏览器提供不同的session,因为每个浏览器取访问web站点的时候,如果发出的http请求没有带JSESSIONID头就会自动给你创建一个并返回
    • session开启需要依赖数据库,因此需要确定是否存在与session相关的表
  • 3)session和cookie的区别:

    • 存放位置:

      • cookie存放在客户端的临时文件里。创建与服务端,保存在浏览器,可以有多个浏览器共享
      • session存在服务器的内存中,一个session域对象为一个用户浏览器服务。
    • 安全性:

      • cookie是以明文方式存放在客户端,安全较差,可以通过md5再存放、
      • session是存放在服务器端的内存中,所以安全性好
    • 网络传输量:

      • cookie会传递信息给服务端
      • session的属性值不会给客户端
    • 生命周期:

      • cookie是累计时间
      • session是间隔时间
    • session失效情况:

      • 关闭服务器
      • 重装 web应用
      • 设置了过期时间,时间到了
      • 服务器错误也会让session失效。
    • 使用原则:

      • session会占用服务器的内存
    • 从范围来看

      • session为单用户独享
      • cookie为多个用户浏览器共享
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值