密码重置Cookie中的重定向URL

时间:2018-05-23 21:19:16

标签: php symfony

我的密码重置过程如下:

  1. 用户点击按钮,将重置电子邮件发送到提供的电子邮件
  2. 点击密码重置链接,打开网页
  3. 用户提交新密码
  4. 重定向回用户最初的位置(例如"查看购物车页面")
  5. 我无法使用$_SERVER['HTTP_REFERER'],因为在重置密码时,我的逻辑中有多个重定向用于某些身份验证算法。使用HTTP_REFERER是不可靠的(我认为)。

    将原始URL存储在cookie中,然后在用户完成密码重置过程后在cookie中使用该数据是不是一个坏主意?或者我应该采用不同的路线,并将重定向链接作为重置电子邮件链接中的参数保存,并将其存储在重置密码表单的隐藏字段中?

    任何建议都表示赞赏!

2 个答案:

答案 0 :(得分:0)

您可以创建一个唯一的ID。然后,您将发送一个指向电子邮件地址的链接,其中包含get参数中的唯一ID。:reset_password?id = 21948HJK9 要验证它是否是正确的用户,您可以将ID存储在数据库中,如果有人试图在24小时后访问它,则将其删除。打开reset_password时,在数据库中搜索id并验证它。在数据库中,id连接到帐户。如果数据库中的id和get参数匹配,则验证。

答案 1 :(得分:0)

从您提供的流程中,步骤1应该将URL的值存储在某处。

您的"重置密码"按钮可能是这样的:

<a href="reset_password.php?prev_url=<?php echo urlencode($_SERVER['REQUEST_URI']); ?>">Reset password</a>

这将为您提供一个变量,其中包含当前编码的URL,即用户所在的页面。

然后,reset_password.php文件可以将$_GET['prev_url'] URL存储在您的密码重置表中(也存储重置链接)。

因此,在您的最后一步中,当验证重置链接时,只需获取表格中的prev_url列,将其存储在变量(我的示例中为$prev_url)中并执行:< / p>

header('location:'.$prev_url);