2015-12-24 141 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 
    } 
});