我有一個控制器發送一個變量數組的電子郵件,其中包括人的名字和他們提出請求的時間戳。該電子郵件發送一個html文件,並在html文件中有一個「點擊此處刪除bla bla bla」。線。當用戶點擊鏈接時,鏈接會將它們發送給控制器,該控制器將從我的數據庫中刪除其名稱。如何在電子郵件中創建自己的「取消訂閱」按鈕?
現在,我不完全確定我應該如何做到這一點。我能明顯做這樣的事情:
Click <a href='https://xxx.xx.xxx.xxx:8000/web/misc/request/delete/<?php echo $data['timestamp']; ?>/<?php echo $data['name']; ?>'> here</a> to delete bla bla bla.
然後,在我的路由文件,我將有:
Route::get('/web/misc/request/delete/{time}/{name}', '[email protected]');
然後我就可以查詢我的數據庫的名稱和時間戳,和中提琴,刪除。
但有人可以很容易地編輯URL中的名稱或時間戳,對嗎?
這使我想使用POST,但我不完全確定在這種情況下我該怎麼做。我可以創建一個表單,將一些輸入設置爲隱藏,然後將名稱和時間戳存儲到這些輸入值中。我還沒有嘗試過這個,因爲它聽起來很哈克。 在這種情況下使用會話也不起作用,對吧? 這是使用cookie的好時機嗎?或者我應該使用某種鍵?
您在每個用戶的網址中包含一個唯一的ID,這是不可能/不切實際的猜測。或者,您可以通過電子郵件確認取消訂閱。 – deceze
一種方法是每發送一封電子郵件,你將創建一個唯一的ID或GUID,並將其放入數據庫中,並將其附加到URL中,然後查詢您的數據庫以查找該條目。他們不太可能會隨機更改指導並匹配其他條目。 – Chris
我絕不是一個專家,但如何爲每個電子郵件地址存儲一個隨機字符串,當你想刪除,檢查該字符串是否正確提供的網址? – lucidbrot