Php 存储未注册客户用户的信息

Php 存储未注册客户用户的信息,php,mysql,web-applications,data-modeling,Php,Mysql,Web Applications,Data Modeling,一个已经暴露出来的问题是向未注册用户开放我们的应用程序(我们可以把它想象成有点像在线商店) 目前,有一个由超级用户添加员工的管理系统和一个通过注册添加自己的客户的网站 我们被要求允许客户在不注册或登录的情况下使用网站,但我们不想破坏“订单”表-我们仍然需要单独参考每个客户并维护注册用户功能(地址查找、购买历史记录等)。我们一直在考虑的主要想法是使用未注册客户的电子邮件地址替换客户表中的代理密钥(或其散列),以便新老客户只需在结帐时输入他们的电子邮件地址即可添加到我们的数据库中,并接收订单确认。管

一个已经暴露出来的问题是向未注册用户开放我们的应用程序(我们可以把它想象成有点像在线商店)

目前,有一个由超级用户添加员工的管理系统和一个通过注册添加自己的客户的网站

我们被要求允许客户在不注册或登录的情况下使用网站,但我们不想破坏“订单”表-我们仍然需要单独参考每个客户并维护注册用户功能(地址查找、购买历史记录等)。我们一直在考虑的主要想法是使用未注册客户的电子邮件地址替换客户表中的代理密钥(或其散列),以便新老客户只需在结帐时输入他们的电子邮件地址即可添加到我们的数据库中,并接收订单确认。管理端的“合并”工具可以缓解每个客户不同电子邮件地址的问题,而多个客户共享同一电子邮件(某些办公环境)的问题对我们来说并不是什么大问题

主要问题是:现实世界的应用程序如何处理未注册用户

根据答案更新


我们不想强迫注册用户每次登录,即使他们的电子邮件地址已经作为注册用户出现在我们的系统中。此外,如果有人主张使用电子邮件地址作为密钥,您将如何处理注册帐户持有人将其电子邮件地址提供给其他人的情况?

我建议在这种情况下不要使用自然密钥,因为他们对注册不感兴趣,也不希望记住他们的详细信息(至少在未注册模式下我是这么想的)


使用一个完全合成的钥匙(比如计数器)就可以了。

在我们公司,我们是这样做的:

  • 当任何用户下订单时,我们都会在
    客户
    表中查找他的电子邮件(他需要指定并且是唯一的)
  • 如果不存在,我们只需创建用户(我们已经从用户订单中获得了所有必需的数据),并将其标记为
    registred=0
  • 现在,我们使用他的用户id继续订单流程
  • 当有人在该电子邮件下注册时,我们只需更新他的凭据(无论他指定了什么),同时保留他的订单历史记录和其他任何内容。我认为这并不构成安全问题,用户需要确认电子邮件地址,因此,除非该帐户确实是他的,否则他无论如何都不会注册

  • 我们不允许已经注册的电子邮件创建订单,这样应该可以清除您的电子邮件合并,因为没有人能够在一个电子邮件地址下创建注册和未注册的帐户,当他创建完后,他将永远无法再未注册地购物。希望这能有所帮助。

    与Pal不同,我强烈赞成使用nat将数据作为密钥

    使用未注册客户的电子邮件地址作为代理密钥

    首先,该语句是一个矛盾修饰法。根据定义,代理键与实际数据无关

    接下来,如果你有他们的电子邮件地址,这意味着他们已经完成了某种注册过程

    如果您有共享电子邮件地址的用户(即身份声明),那么根据定义,他们想要共享该身份-尝试区分他们不是您的问题-尤其是在您已经为他们提供了一种机制来进行个人识别的情况下


    您唯一需要担心的是,如果在没有其他身份验证的情况下使用电子邮件地址,您是否泄露了本应保密的信息(例如以前的订单)

    谢谢,我更正了错误-电子邮件地址将取代现有的代理密钥,并按照您的建议成为自然密钥。我们使用电子邮件地址来识别用户的想法纯粹是为了防止同一客户返回时“唯一”用户的升级。我们不确定是否向以后需要的用户显示订单历史记录选择注册,因为可以想象电子邮件地址过去可能被其他人使用(有点像电话号码)。我想这就是我们目前的想法。尽管如此,为什么不让注册用户在不登录的情况下创建订单?如果他们使用记录中的电子邮件地址,那么订单可以添加到他们的历史记录中。如果他们使用另一个电子邮件地址,可能他们希望它保持独立,或者管理员用户可以合并帐户不管怎么说,是吗?