如何为简报生成取消订阅链接?

Fat*_*rri 6 php newsletter subscription unsubscribe

我想用php写一份时事通讯.但我有一个问题:如何生成取消订阅的代码.实际上,我想为每个订户提供唯一的代码.例如在' http://net.tutsplus.com/ '中你可以看到类似这样的内容:' http://tutsplus.us1.list-manage.com/profile?u = 0154weg635df2fdwied2541cbed & id = c5652sdfre7&e = 8758563dfgde '.另一个问题是这个代码应该保存在数据库中还是没有?(因为我认为如果它对每个人来说都是唯一的,那么每次发送新闻简报时都没有必要生成).任何的想法?

Ond*_*žka 18

生成用户id +一些秘密字符串的散列,将id和散列放入链接,并在验证散列后使用将取消订阅用户的脚本来提供它.

哈希不必在数据库中,只需动态计算即可.

创建取消订阅链接的脚本:

<?
$link = "unsubscribe.php?id=$user['id']&validation_hash=".md5($user['id'].$SECRET_STRING)
<a href="<?=$link?>">Unsubscribe</a>
Run Code Online (Sandbox Code Playgroud)

处理取消订阅链接的脚本:

function unsubscribe() {

    $expected = md5( $user['id'] . $SECRET_STRING );

    if( $_GET['validation_hash'] != $expected )
        throw new Exception("Validation failed.");

    sql("UPDATE users SET wants_newsletter = FALSE WHERE id = " . escape($_GET['id']);
}
Run Code Online (Sandbox Code Playgroud)

它不是最安全的东西,但足够好.