我在我的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
@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