当前位置: 首页 > 知识库问答 >
问题:

phorum中基于PHP cookie的会话交换

吴刚毅
2023-03-14

我在我的phorum服务器中遇到了一个奇怪的错误--似乎是随机的,一些用户将相互交换,并发现他们作为另一个人完全登录,可以完全访问另一个人的帐户。我自己也经历过一次这个bug,但不能重新创建它。

Phorum被配置为通过cookie跟踪会话,会话散列也存储在用户数据库中。我已经确认数据库完好无损,没有会话ID冲突发生。

您可以在这里看到Phorum的身份验证和会话管理的源代码,它相当简单。会话只能通过登录或从现有的cookie创建,所以我的工作原理(在与phorum开发人员交谈后)是服务器上存在某种缓存问题。存在一个影响ASP的已知缓存问题(参见此处或此处的示例),但我的服务器是一个运行Apache2.4、MySQL(严格来说是Mariadb10.1+InnoDB)和PHP5.6的Linux服务器。有人知道这可能是怎么发生的吗?我已经花了一个多星期的时间来研究这个问题,除了确认phorum会话代码中没有bug之外,几乎没有什么进展。

我必须继续的唯一线索是,会话交换是在我的托管服务关闭(并恢复)他们的文件服务器的同一天开始的。然而,他们说他们看不出这有什么责任。

编辑#1:我正在添加一些请求和响应头。

以下是获得论坛列表的初始GET的响应。一般

方法:获取状态代码:200远程地址:x.x.x.x:443

推荐人策略:降级时不推荐人

响应标头

:方法:获取

:path:/forum/list.php?11

:方案:https

接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8

接受-编码:gzip,deflate,br接受-语言:en-美国,en;q=0.9

缓存控制:max-age=0

一般

请求URL:https://www.example.com/forum/ajax.php?client

请求方法:获取状态代码:200(来自内存缓存)

远程地址:x.x.x.x.x:443引用策略:降级时不引用

响应标头

年龄:734岁

缓存控制:必须重新验证

内容长度:2862

content-type:text/JavaScript;charset=UTF-8

日期:2018年5月7日星期一格林尼治时间18:29:37

vary:接受编码

VIA:e2s

共有1个答案

上官恩
2023-03-14

@sammitch是正确的--phorum没有在我的大部分页面的标题中设置缓存控制。这导致我的托管服务自己的缓存系统缓存包含会话cookie的响应。

我修改了我的.htaccess文件,如下所述:https://stackoverflow.com/a/7664157/1411376

这似乎适用于我的服务器配置,因为php代码(phorum)没有设置缓存控制的代码(除了ajax请求)。

 类似资料:
  • 问题内容: 我正在PHP Lumen中构建一个应用程序,该应用程序在登录时会返回令牌。我不知道如何继续进行。 我应该如何使用这些令牌维护会话? 具体来说,如果我使用reactjs或原始HTML / CSS / jQuery,如何将令牌存储在客户端,并在我为Web应用程序的安全部分提出的每个请求中发送令牌? 问题答案: 我通常要做的是将令牌保留在本地存储中,这样即使用户离开站点,我也可以保留令牌。

  • 我正在PHP Lumen中构建一个应用程序,它在登录时返回令牌。我不知道如何继续。 我应该如何使用这些令牌维护会话? 具体来说,如果我使用reactjs或vanilla HTML/CSS/jQuery,我如何在客户端存储令牌,并在我为web应用程序的安全部分发出的每个请求中发送它们?

  • Phorum是一个基于PHP+MySQL开发的开源论坛项目。它的特点是速度快,功能强大,面向模块化设计,安装简单。此外Phorum还集成电子报。 演示地址:http://www.phorum.org/demo/

  • 问题内容: 我一直在整理应该是Web应用程序的一个非常常见的用例。我有一个使用REST信息库,JPA等的Spring-Boot应用程序。问题是我有两个数据源: 包含用户身份验证信息的嵌入式H2数据源 MySQL数据源,用于特定于已验证用户的实际数据 因为第二个数据源是特定于已验证用户的,所以我尝试使用AbstractRoutingDataSource根据验证后的主要用户路由到正确的数据源。 绝对让

  • 问题内容: 我一直在整理应该是Web应用程序的一个非常常见的用例。我有一个使用REST信息库,JPA等的Spring-Boot应用程序。问题是我有两个数据源: 包含用户身份验证信息的嵌入式H2数据源 MySQL数据源,用于特定于已验证用户的实际数据 因为第二个数据源是特定于已验证用户的,所以我尝试使用AbstractRoutingDataSource根据验证后的主要用户路由到正确的数据源。 绝对让

  • 会议的作用是什么? 一般来说, Session 建立与数据库的所有对话,并表示在数据库生命周期内已加载或与之关联的所有对象的“保留区域”。它提供了一个界面,在这里进行SELECT和其他查询,这些查询将返回和修改ORM映射的对象。ORM对象本身在 Session ,在名为 identity map -维护每个对象唯一副本的数据结构,其中“唯一”表示“只有一个具有特定主键的对象”。 这个 Sessio