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

时间:2011-09-21 11:32:46

标签: php mysql web-applications data-modeling

一个已经曝光的问题是打开我们的应用程序(我们可以将它看作有点像在线商店)给未注册的用户。

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

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

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

更新以回应答案

我们不希望强制注册用户每次登录,即使他们的电子邮件地址已作为注册用户在我们的系统上。此外,如果人们主张使用电子邮件地址作为密钥,您将如何处理注册帐户持有人向其他人放弃电子邮件地址的情况?

3 个答案:

答案 0 :(得分:1)

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

  1. 当任何用户发出订单时,我们会在customers表格中查找他的电子邮件(必需指定并且是唯一的)。
  2. 如果不存在,我们只需创建用户(我们已经拥有用户订单中的所有必需数据),并将其标记为registred=0
  3. 现在我们用他的用户ID继续订购流程。
  4. 当有人在该电子邮件下注册时,我们只需更新他的凭据(无论他指定什么),同时保留他的订单历史记录和其他任何内容。我不认为这会引起安全问题,用户需要确认电子邮件地址,所以除非帐户真的是他的,否则他不会注册。
  5. 我们不允许已经注册的电子邮件创建订单,因此应该清除您的电子邮件合并,因为没有人能够在一个电子邮件地址下创建已注册和未注册的帐户,当他完成后,他将永远不会能够再次购买未注册。希望这会有所帮助。

答案 1 :(得分:0)

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

使用完全合成的密钥(如计数器),然后使用它。

答案 2 :(得分:0)

与Pal不同,我强烈赞成使用自然数据作为关键。

  

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

首先,该陈述是矛盾的。根据定义,代理键与实际数据无关。

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

如果您有共享电子邮件地址的用户(即身份断言),那么根据定义,他们希望分享该身份 - 试图区分它们不是您的问题 - 特别是在您已经为他们提供机制的情况下可以单独识别。

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

相关问题