【问题标题】:Fail to create cookies while using ngrok with header rewrite使用带有标头重写的 ngrok 时无法创建 cookie
【发布时间】:2017-05-22 06:53:48
【问题描述】:

我使用 docker 作为我的本地开发环境并使用 dinghy-http-proxy 添加新的 TLD .docker 将请求映射到 nginx-proxy 容器。

我的网站通常通过 http://devel.domain.com.docker 之类的 URL 访问。

我想在访问远程webhook的同时使用ngrok进行本地开发。

我用命令成功启动了ngrok:

ngrok http -host-header=rewrite devel.domain.com.docker 80

我可以通过地址http://randomsubdomain.ngrok.io 访问我的Web 应用程序的登录表单。

但是,我无法登录,因为似乎无法设置 cookie 会话。

确实,我们尝试为域 devel.domain.com.docker 设置 cookie 会话,但由于我们在浏览器中使用 randomsubdomain.ngrok.io,出于安全原因,它们被阻止。

如何绕过这个问题?我的配置中是否缺少某些内容? ngrok 是我想要实现的目标的正确工具吗?

【问题讨论】:

    标签: session cookies webhooks ngrok


    【解决方案1】:

    直接询问ngrok.io支持并得到了这个答案:

    不,你没有遗漏任何东西,这只是重写主机头的一个不幸的副作用。主机头重写仅适用于某些应用程序,因为这样的复杂性(以及其他涉及 javascript 和跨域等)。如果可能,最好重新配置您的网站以接受 ngrok.io 主机标头。

    但是,我通过检查请求是否在标头 x-original-host 中包含域 ngrok.io 找到了解决方案,然后我更改了会话机制(在 PHP 中 session_set_cookie_params)以使用 x-original-host 域。

    【讨论】:

    • 哇。谢谢你张贴这个!我只花了 8 小时试图弄清楚为什么我的 cookie 没有持续存在。但是,在我的情况下,我使用的是 Ruby on Rails,并且 cookie 没有持久化,因为我只是没有指定 -host-header=rewrite。添加了它,它工作得很好。
    • 更多洞察:我最终在让它工作时遇到了更多的麻烦,并意识到它在 Chrome 浏览器中不起作用,但在 Firefox 中起作用!我问 ngrok 这件事,Alan 说:“是的,我相信这是一个 chrome 安全设置?但我从来没有研究过正确的标志来关闭它。让它在 chrome 中工作的正确方法是更改​​:domain= .ngrok.io 到 domain=mydomain.ngrok.io - 我意识到我正在使用 Rails,并且在我的 cookie 设置中有一个选项 domain: :all。我在开发环境中删除了它,现在它可以正常工作了!
    • 之前,ngrok 在我的 Rails 应用程序的会话存储配置中使用 domain: all 设置为我工作。但最近我在 ngrok 和子域方面遇到了类似的问题。 @PeterP 的上述评论帮助了我。我现在必须为本地测试设置 domain: 'mydomain.ngrok.io' 而不是 :all
    【解决方案2】:

    正如mperrin 所说,你必须改变 php cookie 会话机制。

    读自session_set_cookie_params

    设置 php.ini 文件中定义的 cookie 参数。 此功能的效果仅持续脚本的持续时间。 因此,您需要为每个请求调用 session_set_cookie_params() 在 session_start() 被调用之前。

    最重要的参数是$domain,为了让ngrok工作同样出色,您还可以使用before session_start()命令@ 987654326@(见ini_set):ini_set('session.cookie_domain', 'xxx.ngrok.io');

    我还花了几个小时来解决我的自定义托管 php 平台,但我知道我的身份验证子系统应该在除 localhost 之外的有效主机名下工作,所以我专注于如何从我的代码中设置 cookie。

    这种 php 环境设置应该由任何体面的 php 框架尽早设置,这是我开始构建它时的主要目标之一(在我的情况下,我只需要更改服务器上 json 文本文件中的值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2022-11-09
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 2019-01-15
      相关资源
      最近更新 更多