【问题标题】:How to redirect to different domain with a cookie in Express js如何在 Express js 中使用 cookie 重定向到不同的域
【发布时间】:2015-11-01 19:36:41
【问题描述】:

我正在使用 Node 上的 Express 开发一个 Web 应用程序。我正在尝试实现代理登录功能,其中用户在登录到我的站点后直接登录并重定向到另一个站点。

在我的路由函数中,我正在编写以下代码
res.cookie('fanws', 'value');
res.redirect('http://hostname/path');
// 另一个站点

我在 chrome 中使用了调试器,发现 cookie 没有添加到重定向页面中。

我在 localhost 上运行应用程序,而我要重定向到的站点托管在本地网络上的另一台服务器上。

如何在重定向路径上添加 cookie?

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    @jfriend00 很好的解释。 @Kiran G 您可以在同一个重定向中传入查询参数,无需在 express 中设置 cookie,只需在查询参数中发送如下。

    res.redirect(`http://hostname/path?fanws=${value}`);
    

    【讨论】:

      【解决方案2】:

      简而言之,您无法在浏览器中设置 cookie 或读取您无法控制服务器或在该页面中拥有自己的客户端代码的站点的 cookie。出于安全原因,cookie 系统是故意这样设计的。因此,从http://www.domain1.com 的页面或服务器,您无法读取或设置其他域的 cookie。

      如果您在两个域的页面中都有代码,那么您可以将一些信息传递给第二个页面(最有可能作为查询参数),告诉重定向页面中的代码执行一些操作(例如设置 cookie) ,但您必须控制第二页中的 Javascript 或服务器才能执行此操作。


      您的 nodejs 代码中的 cookie 继续当前请求/响应,这意味着当浏览器处理来自当前请求的响应时,它与浏览器中的该域相关联。

      res.redirect(...) 返回一个带有新 URL 的 302 响应作为对当前请求的响应。然后浏览器会看到这个响应代码并向新页面发出新的 Web 请求。除非您也拥有该域的服务器,否则您无法从该新域的服务器设置 cookie。这是 cookie 安全性的一个基本方面。 Cookie 只能通过浏览器中的 Javascript 从与 cookie 所属的同一来源的页面访问,并且服务器只能在它们正在处理的特定请求中为特定来源设置 cookie。

      【讨论】:

        猜你喜欢
        • 2019-06-19
        • 1970-01-01
        • 2021-10-01
        • 2011-08-28
        • 2019-07-14
        • 1970-01-01
        • 2011-05-22
        • 2020-03-17
        • 2018-08-09
        相关资源
        最近更新 更多