RT.
就像一些网站用来给忘记密码的用户,提供的密码重置的链接。发到用户注册邮箱里的那种,只能触发一次,用过一次以后就不能用了。有时候还有时间限制,比如24小时内链接有效之类的。谁知道 这个用 PHP 如何实现呢。 谢谢啦
就像一些网站用来给忘记密码的用户,提供的密码重置的链接。发到用户注册邮箱里的那种,只能触发一次,用过一次以后就不能用了。有时候还有时间限制,比如24小时内链接有效之类的。谁知道 这个用 PHP 如何实现呢。 谢谢啦
你是指弄个像MD5签名的token串,然后再验签吗? 那这样能保证 生成的随机链接的 “一次性” 呢?
你可以记录这个地址是否被访问过.当然你也可以根据生成链接的ip做绑定,不过要考虑登录ID可能自身也会更换ip的问题.
很简单,你只需查询一下表,在表中就通过,否则就拒绝表中只需一个字段 char(32) 设为主键
只存放需要验证内容的 MD5 值
操作也很简单,执行 delete from tbl_name where key='值'
如果 mysql_affected_rows 返回 0 就表示未通过这个方案可以验证任何“一次性”,只要你取得要验证对象的MD5。无需顾忌验证对象的真实内容
然后发个URL在邮件里:xxxx.com?id=md5即可。用户访问这个url的时候从数据库里找该md5,标记完成即可。
感觉md5可以攻击,最好URL带上username,这样不易模仿了。
哇, 那怎么用、key来验证那链接是否是重复被访问呢?
蒽 现在想参照userID然后表里再放个rec的,<?php
$filedir = 'path/to/file/';
$filename = 'XXX.XXX';
// 先判断下downRec的字段是否是1;
if ($downRec = 1) {
exit("already downloaded");
} else if (!file_exits($filedir.$filename)) {
echo "something wrong with the file, contack the manager please.";
} else {
// $downRec++; 把字段更新成1
header("Content-Type: application/...");
header("Content-Disposition: attachment; filename=" . $filename);
ob_clean();
flush();
readfile($filedir.$filename);
exit;
}
?> 你觉得这样可以吗
多谢拉 ^_^
哦哦 问个问题啊,
一直不懂,md5()只是把一串明文散列了下,就是验证了下双方一致, 怎么去保证 唯一性呢?
就是 对象的唯一性,和触发次数的唯一性。 比如说, 要触发下载了, http://xxx.com/callbackurl?user=xxxx&sign=xxxx 这里我的目标是:只是想要那个特定的满足之前的逻辑判断进入这个callbackurl.php的用户触发一次下载, 就是说 对于这个下载的事件、想要保证user对象的唯一性和下载次数的唯一型。
那这里是怎么保证这个链接 被复制 然后到别的客户端 黏贴之后 再去触发相同的下载事件呢?^_^ 多谢拉
唉 乱了,
先说那个吧, 为什么 加上username的参数 以后 就不容易 模仿了呢?
不是在要是 url 是 http://xxx.com/someurl?username=xxx&id=xxx
那不是复制下就有username了吗
因为SESSION是有生命期的,SESSION过期同时链接自动过期即可。
思路:
确定用户身份后。利用session ID+用户名 生成一个唯一的标识$_SESSION['FORGET_CODE']=md5(session_id() . 'XXX'); //XXX是要重置密码的用户名
/*生成的链接如下*/
$href="http://www.domain.com/forget.php?code={$_SESSION['FORGET_CODE']}";认证过程:forget.phpif(!empty($_GET('code'))){
if($_SESSION['FORGET_CODE']==$_GET('code'))
//成功,允许重置
else
//失败
}说明:链接在会话失效后也失效了,一般用户找回密码后立刻登录邮箱点击链接.会话ID是唯一的,同时code也和帐号绑定起来。
2,使用能解密的算法,把时间也做为数据加密,discuz有这种方法。