我正在使用 Symfony2,但这个问题很笼统。
我想登录一个用户并在登录后立即让他从一定数量的“角色”中进行选择。这些角色是数据库中带有大量配置的对象。
问题:存储用户选择的角色的最佳实践是什么?
会议?但是在会话中存储对象是不好的做法,不是吗?会话中角色的 ID?cookie 中角色的 ID(或它的哈希)?
谢谢你的想法。
我会说将角色的 ID 存储在会话中,并在需要时检索所需的对象部分(如果这是一个问题,可能全部在一个数据库调用中保存)。与 cookie 相比,您对会话的控制更多,用户将无法关闭它们。
绝对存储会话 ID 而不是整个对象。特别是如果对象的数据不会因用户而异。事实上,如果对象的数据不会随时间变化,您可能会使用多种技术中的一种来缓存它。
您是否使用 cookie 或会话来存储信息取决于您的要求。如果您需要存储额外的数据(除了角色的 ID),并且要求这些数据不被编辑,那么您应该考虑使用会话,因为它们会阻止用户手动编辑存储的数据。否则,使用 cookie 效率更高,因为服务器不必处理会话存储和检索的所有麻烦。
将角色存储在会话中是一个坏主意,除非角色永远不会改变(在这种情况下,您也可以对它们进行硬编码并仅存储角色 ID),或者您正在以一种允许您轻松更新角色的方式存储会话(数据库会话用于例子)。
将 id/hash 存储在 cookie 中只是愚蠢的 - 如果您可以在 session 中存储 id/hash,为什么还要添加另一个 cookie?
我的建议:在会话中存储角色 ID。如果您担心每次请求都获取它,您可以随时缓存角色。