问候,我正在使用PHP,MySQL和AJAX进行密码恢复系统,系统会生成一个带有加密代码的链接,并将其发送给用户的邮件。
生成的加密链接示例:
$link = www.dominio.com/reset/?code=98rudrm2093xda
用户必须打开电子邮件中的链接,确认请求,站点检测URL的代码,使用PHP和AJAX desencrita并将其与数据库的代码进行比较,如果存在,则创建一个新密码,这都是在AJAX中完成的,但有一些东西,如果用户返回重新加载网页,你会收到一条警告,说明数据库中不存在代码。
问题:
由于我可以使用jQuery删除URL的代码,然后重置密码,以防止在刷新网页时出现警告窗口。
这可能吗?
非常感谢你的帮助!
答案 0 :(得分:3)
我从您的问题中了解到,您需要一种方法来设置密码重置并且不允许重新重置。
code
GET参数(PHP或JS)最后一步是删除URL变量。如果用户再次检查相同的URL,它将从第3步开始。第4步应该停止重新重置密码。
答案 1 :(得分:1)
您可以使用此技术刷新页面。
window.location.href = window.location.href.split('?')[0];
如果您不想刷新或重定向,可以使用此.pushState()
来更新您的浏览器历史记录并更改页面上的网址。这会阻止刷新,但是点击浏览器上的后退按钮会再次触发刷新。
EXAMPLE: history.pushState('/some-url');
您还可以浏览其他HTML5历史记录API方法,例如history.replaceState()
然而,这些都不是最好的做法 - 我认为最好的办法是让查询字符串保持不变,但只有在密码设置正确的情况下才会触发AJAX返回时的警告框/重置。
换句话说,让你的重置处理程序返回一个可读的响应,返回正确的标题(例如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
}
});