2015-12-24 87 views
0

关于我在PHP,MySQL和AJAX中执行密码恢复系统,系统会生成一个带有加密代码的链接并将其发送给用户的邮件。生成的加密链接的Jquery - 清除或删除URL参数

例子:

$link = www.dominio.com/reset/?code=98rudrm2093xda 

用户必须从电子邮件中打开链接,确认的要求,该网站检测URL的代码,使用PHP和AJAX desencrita和将它与数据库的代码进行比较,如果它存在,那么它会创建一个新的密码,这一切都是在AJAX中完成的,但是有一些事情,如果用户返回重新加载网页,您会收到一条警告,提示代码没有存在于数据库中。

问:

正如我可以擦除使用jQuery URL的代码,然后重新设置密码,以防止如果我刷新网页出现警告窗口。

这可能吗?

非常感谢您的帮助!

+0

您应该在用户更改密码后更改该代码..因此,如果用户重新加载页面,他将不再获得相同的代码存在于数据库中 –

+0

为什么不在用户成功更改密码后在数据库中设置标志或者您的链接在一段时间后过期,以便您可以显示相关的错误消息? –

+0

为什么你不能简单地重定向回主页来“重置”URL? –

回答

3

什么我从你的问题的理解是,你想要一种方法来设置密码重置,并不允许重新重置。与编码链接

  1. 发送电子邮件
  2. 具有用户点击链接,访问该页面
  3. 页面将获得code GET参数(PHP或JS)
  4. 做一些神奇的检查中存在代码数据库(PHP)
  5. 如果代码存在,则允许密码重置,并从数据库中删除代码(PHP)
  6. 如果没有,显示错误信息(PHP)
  7. 重定向到index.html或索引。php之后(JS)

最后一步是删除URL变量。如果用户再次检查相同的URL,它将从第3步开始。步骤4应该停止重新设置密码。

+0

由于@Lionel Richie说我不知道​​是否可以删除,更新浏览器或删除URL而不刷新网页页。 –

+0

@Learningandsharing哦,好的。 (另外,通过预先标记一个'@'来标记用户,而不是使用'[方括号]'就像问题的标签一样) –

+0

@Learningandsharing如果是这样的话,看看[这个问题](http:// stackoverflow .com/questions/824349/modify-the-url-without-reloading-the-page)及其答案。我想这就是你要找的。 –

1

你可以使用这将在技术上刷新页面。

window.location.href = window.location.href.split('?')[0]; 

如果你不想刷新或重定向你可以使用这个.pushState()这将更新您的浏览器历史记录和更改页面上的URL。这会阻止刷新,但点击浏览器上的后退按钮会再次触发刷新。

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 
    } 
});