【问题标题】:Is it good practice to store a customers postal address in a cookie?将客户的邮政地址存储在 cookie 中是一种好习惯吗?
【发布时间】:2011-11-20 17:57:41
【问题描述】:

我正在创建一个使用访客结帐方法(无客户帐户)的电子商务页面。结帐过程的一部分将获得客户的电子邮件地址、电话号码、帐单地址和送货地址。我试图避免为此使用会话变量。

我了解 Cookie 不应存储敏感信息,我也了解原因。但是,将客户的账单和送货地址存储在 Cookie 中是好是坏?

如果有帮助,我正在使用 PHP。

【问题讨论】:

  • 使用会话变量有什么问题?
  • 您是否强制使用 HTTPS 进行传输?
  • 你想保存地址多久?
  • @MIchael Mior :我想从托管该站点的共享服务器上分担尽可能多的负载。
  • @WTP :我想把它保存在某个地方,因为当用户在结账过程中编辑购物车时,如果我简单地将它存储在隐藏的表单字段中,这些信息将会丢失。

标签: php session cookies


【解决方案1】:

根本不需要将这些信息保存在 cookie 或会话中。如果您想保留它,只需将其存储在数据库中并将密钥保留在会话/隐藏字段/查询字符串中(可能不是最好的,因为它在地址栏中直接可见)。

Cookie 会随着每个请求来回发送,因此要么不要过多使用它们,也不要在其中放入太多信息。特别是当它包含可以被拦截的敏感数据时。

第一次评论后更新:如果您不想将数据保留在数据库中,那么您需要一个触发器或处理流程,然后再进行扫描。在 ASP.NET 中,当在 SQL Server 中存储会话状态时,这是由一个 SQL 代理作业完成的,该作业每分钟运行一次并取出废弃的会话。您没有指定您正在使用哪个数据库引擎,但它肯定会有类似的东西。如果没有,那么您可以使用任务调度程序或 cron 作业定期调用执行一些清理代码的页面。

【讨论】:

  • 感谢您的回答。我考虑过,但我应该担心删除 db 表中这些未使用的行吗?例如。如果客人开始结帐流程,然后没有购买就离开了网站。从表中删除未使用的行是否重要?
【解决方案2】:

没有理由不加密 cookie,您甚至可以完全摆脱 php 的会话并将所有内容存储在加密的 cookie 中。这样,会话变量不依赖于特定的服务器机器。我能看到的唯一缺点是 4KB 限制。

【讨论】:

    【解决方案3】:

    如果您只是将它从一个页面传递到另一个页面,请使用会话(甚至是隐藏的表单输入字段),没有理由使用 cookie。如果您将它用于返回用户 - 为什么不将所有用户数据存储在数据库中?

    【讨论】:

    • 这只是一个客人结帐。问题是当用户想要在结帐过程中编辑购物车时,如果我只使用隐藏表单技术,这些信息将会丢失。我可能会使用“临时数据库存储”。
    • 我明白了。但它不会丢失,例如,你让用户在第一页输入它,然后在第二页,你读取 $_POST 变量并将它们放在隐藏的表单中,然后发送到下一页等...直到您结帐。说得通?这可能是主观的,但我不想用任何类型的 db 这样做 - cookie 那样就很好。
    【解决方案4】:

    实际上,在 PHP 中,关于 session 的数据完全存储在 cookie 中(带有一些加密),那么为什么你不想使用它呢?

    【讨论】:

    • 在 PHP 中,会话数据存储在服务器上 -- cookie 只包含一个会话 ID。
    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2015-06-23
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多