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

时间:2015-01-29 13:13:55

标签: php apache http session server

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

  1. 用户在电脑上访问他的帐户。
  2. 他去写他的文字
  3. 他写下了他的所有文字,但没有保存。然后打开一个新标签。
  4. 在新标签中,他访问其客户的帐户。
  5. 使用客户的帐户,他去写客户的文字。
  6. 在输入客户的文本后,他会转到上一个标签以保存自己的文本并保存客户文本。
  7. 这两个文本显示在客户页面上。
  8. 我正在思考当前屏幕存储的某个方式实际的会话ID,然后当用户点击链接或发布表单时,当前页面发送在呈现给请求时加载的会话ID页。

    你能帮我吗?

    谢谢!

3 个答案:

答案 0 :(得分:0)

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

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

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

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

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

答案 1 :(得分:0)

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

通过使用它,您可以拥有不会相互冲突的不同(和隔离)会话,即使在同一台计算机上也是相同的浏览器。

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

只需在session_name($UserLogon);之前添加session_start(),就可以正常使用。

答案 2 :(得分:0)

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

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

希望它有所帮助。