此致,我正在用PHP、MySQL和AJAX做一个密码恢复系统,系统会生成一个带有加密代码的链接,并将其发送到用户的邮件中。
生成加密链接的示例:
$link = www.dominio.com/reset/?code=98rudrm2093xda
用户必须从您的电子邮件中打开链接,以确认请求,网站使用PHP和AJAX desencrita检测URL的代码,并将其与数据库的代码进行比较,如果存在,则创建一个新密码,这一切都是在AJAX中完成的,但有一点,如果用户返回以重新加载web,则会收到数据库中不存在代码的警告。
问题:
由于我可以用jQuery擦除URL的代码,然后重置密码,以防止在刷新网页时出现警报窗口。
这可能吗?
我非常感谢你的帮助
我从你的问题中了解到,你想要一种方法来设置密码重置,而不允许重新重置。
- 发送带有编码链接的电子邮件
- 让用户点击链接并访问页面
- 页面将获得
code
get参数(PHP或JS) - 做一些魔术来检查数据库中是否存在代码(PHP)
- 如果存在代码,则允许重置密码并从数据库中删除代码(PHP)
- 如果没有,则显示错误消息(PHP)
- 之后重定向到index.html或index.php(JS)
最后一步是删除URL变量。如果用户再次检查相同的URL,它将从第3步开始。第4步应停止重新重置密码。
您可以使用它来刷新页面。
window.location.href = window.location.href.split('?')[0];
如果你不想刷新或重定向,你可以使用这个.pushState()
,它将更新你的浏览器历史记录并更改页面上的URL。这会阻止刷新,但点击浏览器上的后退按钮会再次触发刷新。
EXAMPLE: history.pushState('/some-url');
您还可以探索其他HTML5历史API方法,如history.replaceState()
然而,这些都不是最好的做法——我认为你最好的选择是让查询字符串保持原样,但只有在密码设置正确的情况下,才会在AJAX返回时触发Alert box/reset。
换句话说,让您的重置处理程序返回一个可读的响应,返回正确的标头(例如,200表示成功,4xx表示失败,等等),并将您的$.ajax()
调用调整为类似的调用
$.ajax({
url: your_url,
data: your_data,
type: 'POST',
success: function(e) {
// Password was reset
// ...show your alert
},
error: function(e) {
// Code wasn't found or reset failed
// ...do nothing or show an error
}
});