如何实现记住我功能? [复制]

2024-01-04

可能的重复:
为网站实施“记住我”的最佳方式是什么? https://stackoverflow.com/questions/244882/what-is-the-best-way-to-implement-remember-me-for-a-website

每个用户都有唯一的 32 个字符的 ID(如下所示:md5("salt" . $username . $user_password . "salt2");)。我将此值存储在表 users 的“unique_id”字段下。将此值分配给用户的 cookie 并仅在分配后才让他登录,这是一个好方法吗?当然还要检查该值是否存在于数据库中?

我认为这不是一个好的做法,因为如果有人窃取了您的 cookie,他们将能够登录您的帐户。

其他/更好的解决方案是什么?当然,最安全的事情可能只是将其存储在会话中,但我想实现这个记住我的功能。

Thanks.


假设持久 cookie 的数据库表名称是pcookies包含以下列:

  • cookie_id(字符)
  • 用户 ID (INT)
  • 到期(日期时间)
  • 盐(字符)

Cookie创建步骤:

  1. 登录成功后,在数据库中创建一个具有唯一id的cookie记录。您可以通过 hash_hmac('sha512', $token, $salt) 生成它,其中 $token=uniqid($user_id, TRUE) 和 $salt=md5(mt_rand()) 。
  2. 将“用户 ID”、“过期时间”和“盐”以及“cookie id”存储在数据库中。
  3. 将“cookie id”和“令牌”存储在 cookie 中。

认证步骤:

  1. 如果找到持久性cookie,首先检查该记录在数据库中是否可用。
  2. 如果记录可用,则检查 cookie 是否过期。
  3. 如果 cookie 没有过期,则通过 $cookie_id == hash_hmac('sha512',$token_from_cookie,$salt_from_db) 验证 cookie id。
  4. 一旦 cookie 被验证,从数据库中删除它并根据上述 cookie 创建步骤创建一个新的 cookie。
  5. 如果发现 cookie 无效,则从设备中清除 cookie,并从数据库中删除用户的所有其他 cookie 记录,注意盗窃企图的使用,然后继续手动登录过程。

Notes:

  • 当会话可用时,忽略检查 cookie。
  • 注销后,清除 cookie 以及数据库记录。
  • 绝不允许用户执行敏感请求,例如更改密码或通过持久 Cookie 登录查看信用卡信息。调用密码登录并在会话中添加标志以允许所有后续操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何实现记住我功能? [复制] 的相关文章

随机推荐

  • Rails 3 控制器中需要 gem 失败并出现“持续缺失”

    我在其他线程中多次看到这个问题 但似乎没有一个答案适用 环境 轨道3 来自 jugend 的亚马逊 ecs gem 唯一的文件在这里 http github com jugend amazon ecs blob master lib ama
  • 如何测试浏览器是否支持

    如何测试当前浏览器是否支持手机浏览器使用设备摄像头拍照的功能 https addpipe com html media capture demo https addpipe com html media capture demo 在所有桌面
  • OSTYPE 在 shell 脚本中不可用

    目前我正在使用新的 Xubuntu trusty tahr 设置一个新系统 我对 shell 脚本不太熟悉 但我有一个需要 OSTYPE 环境变量来确定要做什么的脚本 如果我打电话echo OSTYPE在 xfce terminal 中我成
  • 读取 HTTP 请求标头,并修改 Apps 脚本 Web 应用程序的响应标头

    我可以修改 HTTP 响应标头以添加 cookie 和额外信息吗 另外 我在读取请求标头时遇到问题 您无法在部署为 Web 应用程序的 Apps 脚本应用程序中读取或设置 HTTP 标头 您只能分别读取查询字符串或 GET POST 的发布
  • 批处理文件 - 如何使用 for 循环批量更改所有特定变量

    以下代码接受批处理文件的所有命令行参数 就我而言 我有大约 30 个命令行参数 它们都是 1 2 或 3 的数字 我接受它们然后想将它们重新分配给其他字符 我想要每个var 如果是1 就改成 如果是2 就改成 如果是3 就改成 第一部分效果
  • PHP get_browser:如何识别 ie7 和 ie6?

    有没有办法使用 PHP 的 get browser 函数来区分 IE7 和 IE6 您可以这样做 browser get browser if browser gt browser IE browser gt majorver 6 echo
  • Android Studio 将目录标记为测试源根

    我在 build gradle 中做了一些操作来删除 androidTest java 包的绿色突出显示 我不知道如何把它找回来 IntelliJ 在上下文菜单中有一个 将目录标记为测试源根目录 选项 但我在 Android Studio
  • 使用 Python 3 将 Pig Latin 翻译成英语

    正如您将在下面的代码中看到的 我已经制作了一个将英语翻译成 Pig Latin 的程序 它遵循两个规则 如果单词以元音开头 则应附加 way 例如 apple 变为 appleway 如果单词以辅音序列开头 则该序列应移至末尾 以 a 为前
  • 重复上下动画 div

    我想要一个使用 jquery 重复上下移动的 div 换句话说 div 从某个位置的顶部开始 向下移动 然后向上移动并重复此过程 从上到下大约有 1 秒的时间间隔 再回到顶部大约有 1 秒的时间间隔 有slideUp和slideDown以及
  • 发送以 HTML 文件作为正文的电子邮件 (C#)

    如何使用 HTML 文件设置 MailMessage 的正文 只需设置邮件消息正文格式 http msdn microsoft com en us library system web mail mailmessage bodyformat
  • Scala 的“With”语句等效吗?

    也许是 Scala 学习者的闲思 但是 在我的修改中 我写了以下内容 n child size gt 0 n child filter isInstanceOf Text size 0 n 是 scala xml Node 但这并不重要 特
  • 对二维点数组进行排序以找出四个角

    您好 我有任何大小的二维点的集合 通过查找原点之间距离的最小值和最大值 我能够找出左上角和右下角点 但我无法找出顶部 右点和左下点 也许你可以使用cv approxPoly 找到二维点集的角点 然后您可以通过以下方式按您想要的任何顺序对点进
  • hibernate用于动态表创建

    我是一个 HIBERNATE 初学者 因为我需要创建其中包含动态字段的动态表 所以我选择使用 hibernate 据我了解 创建表需要一个类 其中包含类中定义的字段 如何根据具有所需字段的表动态生成类 我不确定我是否理解这个问题 标题是关于
  • Android使用EGL初始化openGL2.0上下文

    我想在Android上用本机代码进行离屏图像处理 所以我需要通过EGL在本机代码中创建openGL上下文 通过EGL 我们可以创建EGLSurface 我可以看到那里有三个选择 EGL WINDOW BIT EGL PIXMAP BIT E
  • 如何在 Visual Studio 2005/2008 中编译 Flex?

    我无法弄清楚这一点 我可以从 gnuwin32 下载 flex 2 5 4a 的 win32 二进制文件 但我想使用 Visual Studio 2005 构建最新版本 2 5 35 我想我可以在 cygwin 中构建 但其中的乐趣在哪里
  • Django 日志记录旋转文件不起作用

    所以我在 Django 日志记录到达时遇到了一些问题maxBytes尺寸 基本上 当发生这种情况时 文件似乎不会旋转并创建新文件 有人告诉我这可能与服务器的写入权限有关 但我不确定如何正确设置 以便 django 在旧日志文件已满时能够创建
  • 如何更改移动布局上的 Bootstrap 3 列顺序?

    我正在制作一个带有顶部固定导航栏的响应式布局 下面有两列 一列用于侧边栏 3 一列用于内容 9 在桌面上看起来像这样 navbar 3 9 When I resize移动navbar被压缩并隐藏 然后侧边栏堆叠在内容之上 如下所示 navb
  • 在Android中将位图的大小减小到某个指定的像素

    我想将 我的位图 图像尺寸减小到最大 640 像素 例如 我有尺寸为 1200 x 1200 px 的位图图像 如何将其减小到 640px 如果你传递位图width and height然后使用 public Bitmap getResiz
  • 通过 git URL 从 lerna 管理的 monorepo 安装包

    我在我的项目中使用纱线 我的项目有一个依赖项 它恰好是 lerna 维护的较大 monorepo 的子包 子包已更新但尚未发布 我需要未发布的代码 有没有办法通过git url安装lerna的子包 Thanks 如果您的问题是 如何通过 g
  • 如何实现记住我功能? [复制]

    这个问题在这里已经有答案了 可能的重复 为网站实施 记住我 的最佳方式是什么 https stackoverflow com questions 244882 what is the best way to implement rememb