【问题标题】:Using cookies with PHP and MySQL -- Good practice?在 PHP 和 MySQL 中使用 cookie —— 好的做法?
【发布时间】:2011-08-05 05:28:40
【问题描述】:

我有一个将注册用户的网站偏好存储在 MySQL 数据库中的网站,我希望对其进行修改,以便非注册用户也可以使用浏览器 cookie 从网站配置中受益。

有没有常见的方法来做到这一点?我的想法是创建一个包含这些字段的附加数据库表:

id
unique_cookie_hash
site_preferences

其中唯一的 cookie 哈希是存储在访问者的 cookie 中的内容,而站点首选项是包含来宾用户设置的 JSON 编码字符串。因此,对于未登录网站的用户,将检查 cookie。如果 cookie 存在,它将尝试通过存储在 cookie 中的值提取首选项。如果 cookie 不存在或未找到匹配项,站点将创建一个并为其分配一些默认设置值。

当访客进行更改时,网站将尝试对其 unique_cookie_hash 运行 UPDATE 查询。

我假设这会起作用(并且大多数网站都是这样做的?)但由于它对我来说是一个较新的概念,我想知道是否有人知道任何好的教程或'got-yas'需要提防这个方法。

谢谢。

【问题讨论】:

    标签: php mysql cookies


    【解决方案1】:

    这可行,只需注意,通过将您的选项序列化为 JSON 字符串,您无法从中选择任何内容。

    因此,如果您想知道有多少注册人喜欢配色方案 A,例如,您需要在 PHP 中编写所有代码(至少以不繁琐的方式)。

    【讨论】:

    • 同意,最好将 site_preferences 存储在单独的列或不同的表中。您根本不需要将 site_preferences 存储在客户端,只需在其中存储一个标识符,然后在 cookie 中存在 id 时查找它们。
    • 酷,谢谢亚历克斯和迪伦!我正在考虑使用单个列,但大部分设置都是用于过滤要显示的信息的切换。 (大约 30 个)而且对于这么多真/假字段,有些东西听起来很混乱。而且它需要更多的查询维护来添加未来的选项。
    【解决方案2】:

    PHP 有自己的一套管理会话的函数,并且有一些替代的(有些人可能会说更好)库来处理会话。这是一个具有意想不到的安全考虑的复杂问题,所以我不会在没有真正研究之前尝试自制解决方案。

    假设您已经研究过如何安全地存储会话信息,您可以将用户的网站偏好保存在那里,并且当用户登录他们的帐户时,只需将他们存储的偏好复制到他们的会话中,该网站将实际采取行动.

    【讨论】:

      【解决方案3】:

      这取决于设置的数量,但通常我根本不会打扰数据库,而是将它们的设置存储在 cookie 中。

      【讨论】:

      • 感谢弹片上校的回复。是的,我想知道这一点。我想我立即开始寻找涉及数据库的解决方案,因为用户只能潜在地更改用于查找的散列键,而不会尝试将设置值更改为他们自己的一些奇怪的值。虽然通过适当的安全检查,我相信这不会是一个问题。
      • 如果他们希望在不同的浏览器/计算机上维护他们的设置,那就不好了。
      • @Col 好吧,如果他们的偏好存储在他们的 cookie 中,然后他们在另一台计算机上登录,他们的偏好将不会被保留。如果他们有登录名,最好在网站的数据库中维护他们的偏好状态。
      • @alex 他们没有登录名。
      • @Col OP 提到了已注册和未注册的用户。听起来他们登录到我了。
      猜你喜欢
      • 1970-01-01
      • 2019-02-14
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 2017-04-25
      相关资源
      最近更新 更多