【问题标题】:How to make certain html page accessible only via confirmation link?如何使某些 html 页面只能通过确认链接访问?
【发布时间】:2023-03-13 09:02:01
【问题描述】:

我的网站包含一个仅要求电子邮件的简单表单。当用户提交表单时,他们会收到一封确认电子邮件,要求点击“确认订阅”。

这是使用 MailChimp 完成的。一旦他们点击“确认”,他们就会被重定向到我的感谢页面。然而,这个页面有一个普通的 URL,因此只需在浏览器中输入即可访问。相反,我希望这个感谢页面只有在通过其电子邮件客户端中的 MailChimp 确认按钮打开时才能访问。

也许有一种方法可以使用 cookie 来验证用户是否通过 MailChimp 以某种方式被重定向?

你能提供一些建议吗?

非常感谢!

【问题讨论】:

    标签: jquery html forms email cookies


    【解决方案1】:

    您可以考虑使用 .htaccess 页面。

    Options -Indexes
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^[URL]/.*$ [NC]
    RewriteRule ^.* /403.html [L,R]
    

    这是我在我的网站上用来阻止人们访问我的资产文件夹的方法。您只需将 URL 设置为 MailChimp 使用的任何基本 URL。

    【讨论】:

    • 这看起来很有希望,谢谢!但我有几个问题。 1) 我可以简单地将 /403.html 替换为 MailChimp 的基本 URL 吗? 2)这对移动设备也有效吗?我需要它是可靠的,并且没有启用 cookie 等。 3) 我如何确定 MailChimp 的基本 URL?不就是mailchimp.com吗?谢谢!!
    • 1) 你可以这样做 - 或者你可以重定向到你的网络服务器上的另一个页面。 2) 如果您有一封来自 mailchimp 的包含确认按钮的示例电子邮件,我会使用那里的基本 URL。这只是因为有时网站会为某些功能使用子域。这适用于您网站上的所有流量,因此它适用于移动设备。
    • 如果我用我的自定义感谢页面替换 /403.html,那么我在哪里输入 MailChimp 的基本 URL?它是否像这样替换 HTTP_REFERER: RewriteCond %{www.mailchimpsBaseURL} !^[URL]/.*$ [NC]
    • 不,不。 403 是一个错误(这意味着您被禁止访问此页面 - 在这里,我创建了一个自定义页面)。您想要的 URL 位于您想要发送使用该 URL 的人的任何位置,而无需先单击确认按钮。您不会替换 HTTP_REFERRER,而是将 [URL] 部分替换为 mailchimp 基本 URL。它的作用是:将您定向到此 URL mailchimp 的站点是吗?如果是,请继续,否则,转到其他页面。
    • 啊!我明白了,谢谢。我刚刚订阅了我的网站,MailChimp 从 mail2.mcsignup.com 发送了一封电子邮件。那是基本电子邮件吗?
    【解决方案2】:

    我正在为潜在客户生成页面使用类似的设置。 HTML 表单将页面发布(使用 jQuery ajax)到 MailChimp,MailChimp 会在电子邮件中向用户发送验证链接。在我的潜在客户生成页面上,我有一个“隐藏”的 div 显示感谢信息。在通过 ajax 成功发布时,我只是隐藏包含注册表单的 div 并显示带有成功消息的 div。

    由于带有成功消息的div默认是隐藏的,所以除非用户提交注册表,否则它不会显示。

    我不建议在这种情况下使用 cookie。如果用户在其他浏览器或计算机上打开确认链接怎么办?

    【讨论】:

    • 谢谢 Tej,你能以某种方式分享你的解决方案或提供一些例子吗?另外,我不知道您的解决方案是否适合我,因为听起来您的成功消息是在他们单击电子邮件中的“确认”之前出现的?这意味着在我的情况下,他们甚至可以在确认注册之前输入关键字(在那个成功页面上)并提交。我可能记错了
    • 你的假设是对的。在您的情况下,您可以 1) 在 MailChimp 本身中配置成功消息。 2) 在 MailChimp 中配置以重定向到成功页面并在查询字符串参数中传递 GUID。如果 GUID 参数在 URL 中不可用或不匹配,则将用户重定向回注册页面。
    【解决方案3】:

    是的,cookie 将是解决此问题的一种方法。在重定向页面中,您可以处理一个标志以将用户标记为“已验证”,然后有条件地使用此 cookie 来显示附加数据。这可以通过使用 $_GET 变量之一并处理表单中的某些内容来实现。您始终可以通过隐藏的表单字段来执行此操作。使用 mailchimp,我知道他们通常也有回发处理过的表单数据的方法。您也可以使用 $_SESSION 超级全局。如果用户已登录,另一种方法是在用户数据库条目中存储一个标志,但显然这仅在这些条件下有效。

    请记住,为此使用会话或 cookie 有点不稳定,因为如果用户出于某种原因禁用了 cookie,它将无法正常工作。此外,如果他们从不同的设备访问该站点,这显然也不会持续存在。这就是为什么您可能希望通过用户登录来强制执行数据库方法,这样更可靠。

    是的,我在您的网站本身上谈论。整个用户登录系统的替代方案是获取他们的 IP,在他们验证时将其存储在数据库表中,然后在决定是否显示其他内容时进行检查。然而,这本身可能会导致性能下降,尤其是随着用户群的增长。

    但是,您可以将其与 cookie 或 $_SESSION 结合使用,以从本质上模拟它们的登录状态。然后,一旦你设置了他们的 $_SESSION,你就可以在连续加载时检查它,而不是访问数据库。无论如何,这基本上就是传统登录系统的处理方式,我们只是取消了登录要求本身,而是使用了他们的 IP。

    【讨论】:

    • 感谢混合。我肯定更喜欢使用可靠的方法,但我对如何在用户数据库条目中存储标志感到困惑。您是在谈论在 MailChimp 中做某事吗?或者您是否建议我向我的网站添加会员功能。对于这么简单的要求,这似乎是一项艰巨的任务……
    猜你喜欢
    • 2012-08-12
    • 1970-01-01
    • 2023-04-02
    • 2016-02-23
    • 1970-01-01
    • 2016-02-18
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多