使用会话过滤帖子--这是一件坏事吗?

时间:2014-11-06 作者:Howdy_McGee

我有一个post类型的存档,在侧栏中进行过滤,在底部进行分页。我最大的问题之一是我总是会失去$_POST 在页面刷新时单击分页时进行筛选。我决定将过滤变量存储在$_SESSION 在页面发布时使用变量,然后将这些变量与pre_get_posts 获取我的筛选帖子。我的$_SESSION 是一个过滤器变量数组,它在多个页面中持续存在(不刷新、分页),并在用户访问非post_type_archive() 或者每当用户提交筛选表单时。据我所知,它很有效。

我向一位朋友展示了我的变通方法,他认为$_SESSIONS 在这种情况下,这是一种不好的做法,因为它确实在服务器中存储文件,而在高流量站点上,这可能会变得很麻烦。他还提到,锁定的浏览器可能无法很好地处理会话,我认为这是可能的。

我的问题是,在这种情况下$_SESSIONS 真的是件坏事吗?据我所知,它们是为这种坚持而生的。这种设计有什么缺点吗?

2 个回复
最合适的回答,由SO网友:iyrin 整理而成

就它们在WordPress中的使用而言,没有使用$\\u会话的本机方法。这意味着您完全有责任缓解由此带来的任何安全问题。

其他问题取决于会话数据的保存方式。我注意到的一个问题是,当达到memcache的分配内存时,它会丢弃最近使用最少的对象,以便为新对象腾出空间1. 但是,如果您可以分配适当的内存来支持站点的流量水平,那么这对$\\u会话来说也应该不会有问题。

WordPress有一个用于瞬态的API,其中数据存储在数据库中,除非使用缓存插件(我相信这最终取决于wp_using_ext_object_cache2). 当存储在数据库中时,最近使用最少的数据的丢失不应该是瞬态的问题。这可能有优点也有缺点(数据库与快速内存),但我只想演示WordPress存储临时数据的本机无状态设计解决方案的一个示例。如果在使用$\\u会话时出现此问题,则必须在WordPress之外的服务器端解决此问题。

根据会话是否保存在硬盘文件、RAM、数据库或其他文件中,存在性能优势/劣势。这些问题更多地涉及到服务器的设置方式,而不是WordPress中$\\u会话的使用,因为WordPress本质上对$\\u会话的使用是盲目的。

WP Engine发布了一个很好的概要,说明了为什么他们不建议使用WordPress的$\\u会话3, 我已经在下面发布了。其中一些更适用于服务器的设置方式,但请查看并确定它们可能会对您的站点产生何种影响,以及您是否认为$\\u会话是一个很好的解决方案。正如我所说,WordPress对$\\u会话的使用视而不见,它不是本机处理的,这使得是否应该在PHP代码中使用它这一更广泛的争论成为可能。

PHP会话
我们目前根本不建议使用$\\u会话变量。原因有很多:

虽然WordPress本身支持使用$\\u会话,但WordPress是无状态的,不在本机使用$\\u会话。使用WordPress的正确方法是使用Cookie。

使用$会话时存在许多安全问题:

会话中毒攻击者首先访问受害者的页面,例如登录。然后,攻击者将一个PHP脚本上载到他的帐户,并让它显示$\\u会话的上下文(由受害者脚本设置)

  • http://phpsec.org/projects/guide/4.html
  • http://phpsec.org/projects/guide/5.html 会话ID劫持(在共享服务器上)可能是PHP网站的一个问题。PHP会话跟踪组件为每个用户的会话使用一个唯一的ID,但如果其他用户知道该ID,则该用户可以劫持该用户的会话并查看应保密的信息
    会话ID劫持无法完全防止;你应该知道这些风险,这样才能减轻它们。根据您与我们合作的计划,您的网站可以在共享Web服务器上运行。请注意,同一服务器上的任何其他用户都可以轻松查看任何会话变量。通常,缓解此漏洞的最佳方法是将所有敏感数据存储在一个数据库记录中,该数据库记录以会话ID为键,而不是作为会话变量。非敏感数据可以存储在cookie中。

    对于安装在群集上的客户,我们必须完全更改负载平衡器的工作方式,以确保不同服务器之间可以使用$\\u会话变量

SO网友:rfair404

简短回答,是,$\\u会话==\'坏事\'

另一种可能是禁用“内置”分页并添加ajax的分页。然后,您可以将查询关联起来,以尊重过滤器。

结束

相关推荐

Admin sidebar customization

我的新客户wordpress站点在管理侧栏中没有插件、外观或任何其他默认项。谁能告诉我这些是怎么出现的吗。该站点正在主站点的子目录中运行。它有自己的wordpress安装。主题是前面的rttheme16。提前谢谢。