PHP - 如何将当前会话 ID 告知下一个服务器请求


PHP - How to tell current session id to the next server request?

我在这里遇到了一个大麻烦:在我的公司里,我们有一个庞大的系统,每天都有太多人访问它。我们遇到以下问题:

  1. 用户在电脑 A 上访问他的帐户。
  2. 他去写他的文字
  3. 他写下了所有的文本,但没有保存它。然后打开一个新标签页。
  4. 在新选项卡中,他访问客户的帐户。
  5. 使用他的客户的帐户,他去写客户的文字。
  6. 键入客户的文本后,他转到上一个选项卡以保存自己的文本,然后保存客户文本。
  7. 这两个文本将显示在客户的页面上。

我以某种方式考虑当前屏幕存储某处的实际会话ID,然后当用户单击链接或发布表单时,当前页面发送呈现到请求页面时加载的会话ID。

你能帮我吗?

谢谢!

遵循指定的用例有点困难,但听起来您需要检查访问权限才能将"文本"保存到特定帐户。

目前,您经过身份验证的客户帐户似乎正在保存到不属于他们的帐户?

例如,在新的文本方法中,在任何事情发生之前:

if($currentUserID != $accountOwnerID)
{
     // throw a 403 exception here
}

这样,如果他们碰巧在会话期间更改了身份,则始终会在发生任何其他事情之前检查其访问权限。

最好的解决方案是使用命名会话。请参阅: session_name()

通过使用它,您可以拥有不同的(和孤立的)会话,这些会话不会相互冲突,即使在同一台计算机,同一浏览器中也是如此。

对于您的特定情况,我将创建一个以用户登录命名的会话,这是唯一的。这样,如果用户 A 登录,他将拥有自己的会话。如果打开一个新选项卡,并且他以用户 B 身份登录,则将创建一个不同的会话,并且两个选项卡将同时正确工作,每个选项卡都在自己的会话空间上。

只需在session_start()之前添加session_name($UserLogon);,应该可以正常工作。

您可以使用会话密钥进行检查。

首先,您需要创建一个随机会话密钥并将其存储在会话变量中。此外,在窗体中提供此值作为隐藏元素。在插入过程中,您可以检查隐藏元素中的值是否与会话密钥相同,然后插入。否则通过错误消息。成功插入后,再次重置会话密钥。它将克服您的问题。

希望对您有所帮助。