【问题标题】:Managing session in PHP AWS在 PHP AWS 中管理会话
【发布时间】:2014-02-13 16:10:22
【问题描述】:

我有一个托管在 AWS 上的网站,我无法信任此会话数组 $_SESSION[],因为有时 select * from table_name where id=$_SESSION[id] 无法按预期工作。 我正在寻找一些会话管理技巧,如果我使用数据库或 Dyanmo DB 可以吗? 如果有一个拥有大量用户的可扩展应用程序,那么首选的方法是什么?

【问题讨论】:

  • 如果你只在一个盒子上托管,那么会话应该没有问题(除非你的代码有问题),然后切换到数据库没有任何区别;如果您要在多个 webhead 之间分配负载,那么您要么需要粘性会话(因此来自同一用户/会话的所有活动都被定向到同一个 webhead),或者需要一个可从所有 webhead 访问的会话 - elasticache 就是一个明显的例子分布式会话处理选项
  • 你对这个值有任何SQL escaping吗?
  • @MarkBaker 是的,有很多 webheads(实例)
  • @tadman 我一定会的
  • @user1765876 如果实例失败,用户将失去他们的会话,需要在不同的 Web 前端重新开始一个新会话。将会话存储在 memcached 中会好得多。您可以使用 php-memcache 扩展和一个(或两个)弹性缓存实例非常轻松地做到这一点。

标签: php mysql session amazon-web-services amazon-dynamodb


【解决方案1】:

在 php 中存储会话有 3 个基本选项:基于文件、memcached 和数据库支持。

如果您使用基于文件的会话,则需要使用粘性会话,因此来自同一用户的后续请求会被路由回同一实例。如果您使用自动缩放,这可能不起作用 - 如果实例停止,那么该用户将失去他的会话。

您可以使用 memcached,其中有一个存储会话的 memcached 实例。这可能是最简单的选择。实例上不保存任何状态,您不需要使用粘性会话。只要不超过 memcached 的可用内存,应该没问题。

第三个选项是使用数据库支持的会话。这应该与使用 memcached 会话具有相同的效果,但确实允许更复杂的行为 - 例如,您可以跨数据中心复制数据库,并且理论上允许您拥有跨多个区域扩展的应用程序。

【讨论】:

  • 选项2和选项3有教程吗?
猜你喜欢
  • 2012-12-12
  • 2011-04-29
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 2012-12-03
  • 2012-09-07
  • 2020-11-02
相关资源
最近更新 更多