首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为你的时事通讯实现退订链接的最好方法是什么?

为你的时事通讯实现退订链接的最好方法是什么?
EN

Stack Overflow用户
提问于 2009-05-12 17:20:55
回答 3查看 10.5K关注 0票数 11

我在想,我创建了一个去激活码,把它和他们的用户id一起放在退订链接中。然后,当我的时事通讯的收件人点击链接时,我可以查找他们的用户id,并查看去激活码是否匹配。

这听起来像是最好的方式吗?

还有其他一些方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-12 17:27:09

你可以使用散列算法来保护userID (这样就没有人能用一个讨厌的循环注销你所有的数据库)。

你最终会得到两个参数: userID和哈希。

优点是您不需要存储停用代码和userID之间的任何映射。

票数 11
EN

Stack Overflow用户

发布于 2012-06-28 05:04:33

从终端用户的角度来看,单击取消订阅是非常好的。

然而,使用散列( ID + secret)是不安全的,因为聪明的攻击者可以非常迅速地“蛮力”秘密,然后通过增加ID来继续取消订阅数据库中的每个用户。

在服务器上保持ID“半保密”,并在取消订阅时使用电子邮件地址来查找用户,这样会更安全。这样,成功的取消订阅需要将电子邮件地址与正确的ID配对。您可以为每个用户保存一个真正的密钥,并使用该密钥而不是ID,从而使其更加安全。如果电子邮件+ ID对已发布,这一点尤其必要。

例如,您的取消订阅链接将如下所示:

代码语言:javascript
运行
复制
http://mydomain.com/unsubscribe?email={$email}&hash={$hash}

生成$hash的服务器端函数在PHP中如下所示:

代码语言:javascript
运行
复制
<?php
function unsubscribeHash($id, $email) {
    $hashSecret = 'Fz!Fx~36N66>io3B-vlPDshdRxos8JjCd4+Ld-s2^ca{19Q/5u';
    return sha1($id . $email . $hashSecret);
}
?>

然后,要完成取消订阅,您将通过电子邮件查找用户,并验证

$_GET['hash'] == unsubscribeHash($user_id, $_GET['email'])

票数 12
EN

Stack Overflow用户

发布于 2009-05-12 17:22:39

从用户的角度来看,不需要用户输入电子邮件地址即可取消订阅。一种将所有信息嵌入到链接中的方法(如您所描述的)要好得多。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/853877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档