我在这里遇到了一个大麻烦:在我的公司里,我们有一个庞大的系统,每天都有太多人访问它。我们遇到以下问题:
- 用户在电脑 A 上访问他的帐户。
- 他去写他的文字
- 他写下了所有的文本,但没有保存它。然后打开一个新标签页。
- 在新选项卡中,他访问客户的帐户。
- 使用他的客户的帐户,他去写客户的文字。
- 键入客户的文本后,他转到上一个选项卡以保存自己的文本,然后保存客户文本。
- 这两个文本将显示在客户的页面上。
我以某种方式考虑当前屏幕存储某处的实际会话ID,然后当用户单击链接或发布表单时,当前页面发送呈现到请求页面时加载的会话ID。
你能帮我吗?
谢谢!
遵循指定的用例有点困难,但听起来您需要检查访问权限才能将"文本"保存到特定帐户。
目前,您经过身份验证的客户帐户似乎正在保存到不属于他们的帐户?
例如,在新的文本方法中,在任何事情发生之前:
if($currentUserID != $accountOwnerID)
{
// throw a 403 exception here
}
这样,如果他们碰巧在会话期间更改了身份,则始终会在发生任何其他事情之前检查其访问权限。
最好的解决方案是使用命名会话。请参阅: session_name()
通过使用它,您可以拥有不同的(和孤立的)会话,这些会话不会相互冲突,即使在同一台计算机,同一浏览器中也是如此。
对于您的特定情况,我将创建一个以用户登录命名的会话,这是唯一的。这样,如果用户 A 登录,他将拥有自己的会话。如果打开一个新选项卡,并且他以用户 B 身份登录,则将创建一个不同的会话,并且两个选项卡将同时正确工作,每个选项卡都在自己的会话空间上。
只需在session_start()
之前添加session_name($UserLogon);
,应该可以正常工作。
您可以使用会话密钥进行检查。
首先,您需要创建一个随机会话密钥并将其存储在会话变量中。此外,在窗体中提供此值作为隐藏元素。在插入过程中,您可以检查隐藏元素中的值是否与会话密钥相同,然后插入。否则通过错误消息。成功插入后,再次重置会话密钥。它将克服您的问题。
希望对您有所帮助。