【问题标题】:PHP Sessions stored in MySQL in Ajax heavy environmentAjax重载环境下存储在MySQL中的PHP Sessions
【发布时间】:2010-11-11 09:34:15
【问题描述】:

我希望更改我的应用程序以将 PHP 会话数据存储在 MySQL 中。该应用程序是 ajax 密集型的,但不使用长轮询或任何其他类型的持久连接。

我的问题是,在编写此代码时我需要注意哪些问题?例如;我有一个页面发送 4 个 ajax 请求来加载数据(对于另一个主题);如果我必须在每个请求上更新会话数据,这会导致任何锁定问题吗?

谢谢。

【问题讨论】:

    标签: php mysql ajax


    【解决方案1】:

    如果您同时向多个脚本发出 ajax 请求,可能会出现竞争条件。除非您使用回调,否则您无法验证它们是否会按照您分配 ajax 请求的顺序完成,这会证明相当慢。

    只要您只是阅读就应该没问题,但如果您在发出多个请求时写入,则无法验证读取是否发生在最新数据上。

    【讨论】:

    • 好的,还不错,这样对吗? - 一旦用户登录,我需要存储会话数据 - 我需要读取每个请求的会话数据 - 一旦用户注销,我需要删除会话数据。这是正确的流程吗?如果他不退出会发生什么?我如何知道何时更新会话数据?
    • 只在需要时更新会话,注销/登录是主要的。如果用户没有注销,则保留会话存储应该没问题,但在上次存储时包含时间戳,以便在人们开始会话但从不注销/返回时进行清理。
    【解决方案2】:

    如果速度是您最关心的问题,那么将会话数据存储在 Memcache 中会好得多。您不会有与在表中存储数据相关的数据库延迟——memcache 使用哈希键将数据存储在 RAM 中。这释放了您的关系数据库以执行实际的关系查询,并释放内存以缓存数据库的其他部分(对会话表的许多请求将填满用于缓存其他表的任何可用内存,否则将确信会话缓存是最重要的)。

    当然,这是另一个需要学习和维护的依赖项和服务,但速度的提升是巨大的。

    【讨论】:

    • 关于 Memcache 扩展:us2.php.net/memcache 大量关于使用 Memcache 存储会话数据的文章:google.com/search?q=php+memcache+sessions 此外,一旦您设置了此对象数据库,您将能够在其他部分使用它解决您的问题,以改进对单个数据记录的查找,而无需承担关系数据库的负担和开销。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多