存储用户';以下';在PHP会话期间

存储用户';以下';在PHP会话期间,php,javascript,Php,Javascript,我在我的应用程序中设置了一个简单的追随者/追随者系统 在会话期间存储一个完整的“用户跟踪”数组的最佳方法是什么,这样我就不必在整个过程中多次查询数据库 澄清一下:当用户在获得授权后登录时,我会查询数据库,获取登录用户正在跟踪的用户的完整列表,并最终将其存储为JavaScript变量。通过这种方式,在整个站点中,当用户四处导航时,我可以根据他们可能遇到的任何其他用户不断检查以下状态 当用户加载整个页面时,此查询只执行一次,而在该页面周围导航不会重复 这适用于javascript生成的内容,如用户悬

我在我的应用程序中设置了一个简单的追随者/追随者系统

在会话期间存储一个完整的“用户跟踪”数组的最佳方法是什么,这样我就不必在整个过程中多次查询数据库

澄清一下:当用户在获得授权后登录时,我会查询数据库,获取登录用户正在跟踪的用户的完整列表,并最终将其存储为JavaScript变量。通过这种方式,在整个站点中,当用户四处导航时,我可以根据他们可能遇到的任何其他用户不断检查以下状态

当用户加载整个页面时,此查询只执行一次,而在该页面周围导航不会重复

这适用于javascript生成的内容,如用户悬停卡等

但是,我希望将这个数组(仅由userid组成)存储在PHP本身中,以便在生成需要执行“follower/following”检查的content server端时,防止进一步查询下表

最好的方法是什么

请记住,结果是缓存在memcached中的,但是如果我可以避免任何查找,并有一个一致的数组来检查,那就太好了


提前感谢

将其存储在会话变量中

更新


将当前用户存储在会话中,并将其添加到您正在执行的查询中,以获取弹出式窗口信息,并添加测试弹出式窗口用户是否跟随当前用户。

将其存储在会话变量中

更新


将当前用户存储在会话中,并将其添加到您正在执行的查询中,以获取弹出式窗口信息,并添加它测试弹出式窗口的用户是否跟随当前用户。

因此,让我说对了,您想存储此列表,以便不在每页上查询它吗

首先,我建议您只在需要此数据的页面上执行此查询,其次,我建议您不要在这些页面上尝试此操作

想象一个用户停止跟随或开始跟随。一些复杂的缓存计算器或事件冒泡器被编程到您自己的PHP应用程序中,用于清除外部会话的数据(这是不好的,用户可以访问非自己的数据,这是一个会话事实),可能与安全性和性能不符

更好的做法是为每个新页面再次执行查询。这将更容易,可能更高性能,不会是微观优化

编辑
如果你在一页上挑出了10k行,那么你可能做错了什么。您可能从错误的角度看它。

那么让我来纠正一下,您想存储此列表,以便不在每页上查询它吗

首先,我建议您只在需要此数据的页面上执行此查询,其次,我建议您不要在这些页面上尝试此操作

想象一个用户停止跟随或开始跟随。一些复杂的缓存计算器或事件冒泡器被编程到您自己的PHP应用程序中,用于清除外部会话的数据(这是不好的,用户可以访问非自己的数据,这是一个会话事实),可能与安全性和性能不符

更好的做法是为每个新页面再次执行查询。这将更容易,可能更高性能,不会是微观优化

编辑
如果你在一页上挑出了10k行,那么你可能做错了什么。您可能从错误的角度来看待它。

想到的两种方法是每次只编写带有位置良好的索引的连接(您已经说过不想这样做),并且在会话中只编写一个简单的数组,它可能看起来像这样:

if (!isset($_SESSION['following']) {
    $following = $user->getFollowingIds(); //some query in here to get an array of ids
    $_SESSION['following'] = $following;
    $_SESSION['following_str'] = implode(',', $following);
}
$query('SELECT status.* FROM status WHERE user_id IN (' . $_SESSION['following_str'] . ')'); //not sanitized or safe but you get the idea
然后,每当您想要为
$user
跟踪的人员提取所有状态时,您都可以编写一个查询,如下所示:

if (!isset($_SESSION['following']) {
    $following = $user->getFollowingIds(); //some query in here to get an array of ids
    $_SESSION['following'] = $following;
    $_SESSION['following_str'] = implode(',', $following);
}
$query('SELECT status.* FROM status WHERE user_id IN (' . $_SESSION['following_str'] . ')'); //not sanitized or safe but you get the idea

我想到的两种方法是每次只写带有位置良好的索引的连接(您说过不想这样做),以及在会话中只写一个简单的数组,它可能看起来像这样:

if (!isset($_SESSION['following']) {
    $following = $user->getFollowingIds(); //some query in here to get an array of ids
    $_SESSION['following'] = $following;
    $_SESSION['following_str'] = implode(',', $following);
}
$query('SELECT status.* FROM status WHERE user_id IN (' . $_SESSION['following_str'] . ')'); //not sanitized or safe but you get the idea
然后,每当您想要为
$user
跟踪的人员提取所有状态时,您都可以编写一个查询,如下所示:

if (!isset($_SESSION['following']) {
    $following = $user->getFollowingIds(); //some query in here to get an array of ids
    $_SESSION['following'] = $following;
    $_SESSION['following_str'] = implode(',', $following);
}
$query('SELECT status.* FROM status WHERE user_id IN (' . $_SESSION['following_str'] . ')'); //not sanitized or safe but you get the idea

这是我最初的想法。。。。然而,我担心数组变得太大,比如说10000个追随者左右。您会考虑将追随者数据存储在会话标准实践中吗?谢谢。10000是一个有点多的数据和改变球赛。如果是这种情况,那么当用户访问其关注者页面或创建悬停时,您对数据库的查询将是一个更好的位置,并且根本不存储整个列表。有了好的索引,与在PHP数组中浏览10000篇文章相比,它应该是轻快的。谢谢Henrik-这将很简单,但是应用程序中的每个页面都包含关于您正在关注或正在关注的用户的信息。当然,每次需要时,我都可以简单地检查每个用户是否存在该行,但这对我来说似乎效率不高。我很高兴你会重新考虑这个过程,只是感觉不太对劲。谢谢你的帮助,伙计。。。非常感谢。:)这是我最初的想法。。。。然而,我担心数组变得太大,比如说10000个追随者左右。您会考虑将追随者数据存储在会话标准实践中吗?谢谢。10000是一个有点多的数据和改变球赛。如果是这种情况,那么当用户访问其关注者页面或创建悬停时,您对数据库的查询将是一个更好的位置,并且根本不存储整个列表。有了好的索引,与在PHP数组中浏览10000篇文章相比,它应该是轻快的