【问题标题】:User session on social website - logic question社交网站上的用户会话 - 逻辑问题
【发布时间】:2011-02-07 15:28:27
【问题描述】:

我有一个正在开发 PHP codeignitor 和 MySQL 的社交网站。我将用户会话存储在数据库中以处理多服务器环境。目前只有 1 个数据库。

1) 要处理多个数据库(+ 多服务器),用户会话将如何存储以及存储在何处?我假设数据库不会在多数据库环境中工作。

2) 给用户的会话 ID,是从数据库自动增加还是从应用程序逻辑生成?我认为它应该是一个 GUID?

3) 除了会话 ID,我还有一个 user_session 表,它记录了所有与会话相关的详细信息,例如 login_datetime、logout_Datatime、如果用户在网络/移动设备上等。因此必须分两个阶段写入该表:当用户登录并在用户注销时再次登录。问题是当用户注销时系统应该遵循什么逻辑来写入日期?就像系统如何知道将数据写入哪个 user_session 一样,因为这个 PK ID 是一个数据库驱动的自动增量值,并且是在创建主会话 ID 之后创建的。所以最后需要查询 user_session 表找到 user_Session ID 然后写入。

【问题讨论】:

  • 你使用过默认的 PHP 会话机制吗?
  • 在数据库中存储用户会话与多服务器环境有什么关系?为什么默认 PHP 会话不适合您?反正。多数据库环境有什么问题?您在这里看到了哪些特殊问题?
  • 使用 memcached 进行会话效果很好。
  • 我从未使用过 memcache 来存储会话。该网站即将推出,尚未上线。在数据库中存储会话是如果有多个数据库并且会话存储在数据库A中,那么当使用rlogs关闭2小时后,系统需要从数据库A和数据库B获取ID。所以它需要知道。与多台服务器相同。一个是网络服务器,一个是图像服务器,一个是视频服务器,等等。每个服务器都需要检查用户的会话,这需要相同,因为所有用户活动都链接到同一个会话
  • imp 方面是我需要用户的最后活动日期时间来写入会话注销日期,因此我需要以某种方式知道如何在用户注销时找到用户的会话,系统将如何找到它桌子?

标签: php database session codeigniter


【解决方案1】:

您的评论为我提供了一些关于为您解决此问题的最佳方法的线索。

首先,如果该网站即将启动但尚未上线,解决您的问题的最佳方法是:不要担心这个问题。暂时只需将所有内容托管在具有一个数据库的一台服务器上。您的想法,无论多么出色,都需要先解决最初的几个真实用户的许多问题,然后才能满足需要更多硬件的需求。

其次,您的图像和视频服务器可能不需要用户的会话信息。如果用户请求带有视频的网页,并且他们有足够的访问权限来查看该网页,那么您可能只需发送视频而无需进一步的身份验证检查。此选择还将使您能够使用内容交付网络(我个人喜欢 RackSpace Cloudfiles,与 Akamai 建立了合作伙伴关系),与使用您自己的服务器相比,用户体验得到了显着改善。

祝你好运!

【讨论】:

  • 我很快就会有多个数据库,因为启动时我有 1 个用于用户数据的数据库,第二个用于用户分析的数据仓库,它将数据输出到同一个用户会话。因此,我需要确保这两个数据库都可以在创建会话时重新调整相同的用户会话,因为每个用户活动都映射到会话 ID,并且在会话结束时再次映射到会话 ID,因为最后一个活动日期时间或用户注销被写为会话结束日期时间。那么我看到的唯一方法是 memcache 正确吗?
  • 为什么不在同一个数据库中有一个用于用户数据的表和另一个用于用户分析的表?
猜你喜欢
  • 2014-09-14
  • 1970-01-01
  • 2011-03-30
  • 2015-01-06
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多