选项卡中的PHP会话

时间:2011-02-19 12:24:05

标签: php session

考虑这个问题

  1. 在步骤1中,用户选择我正在存储的产品$ _SESSION ['id'] = 55;
  2. 现在,用户转到第2步,在新标签页中打开另一个产品。
  3. 现在转移到该选项卡现在是product2
  4. 的第1步
  5. 现在$ _SESSION ['id']设置为56;
  6. 用户移动标签1并继续执行第3步
  7. 但现在$ _SESSION ['id'] = 56而不是55
  8. 我该如何防止这种情况发生。这是一个熟悉的问题,所以想要一个通用的解决方案。

2 个答案:

答案 0 :(得分:3)

会话是网站范围的,因此如果您在一个标签中更改相同的会话,则会在其他标签中更改。这就是会话用于站点范围登录的原因,因为它们不会在不同窗口之间发生变化。

您应该考虑使用Cookie或多个会话,但是您无法逐个选项地更改相同的会话。

答案 1 :(得分:1)

  

在第1步中,用户选择我的产品   存储$ _SESSION ['id'] = 55;

     

现在用户转到第2步并打开   新标签中的另一个产品。

     

现在转到该标签现在是第1步   对于产品2

     

现在$ _SESSION ['id']设置为56;

     

用户移动标签1并继续执行第3步

     

但现在$ _SESSION ['id'] = 56而不是55

     

我该如何阻止这个

简单 - 你没有将$ _SESSION ['id']设置为56.但是说真的,你可能想重新考虑如何解决你的问题。将“id”放入会话中一次只允许一个产品。正如@Gumbo指出的那样,为什么不把ID放入URL?

或者,根据您的确切问题,您可能需要考虑设置会话变量,如$ _SESSION ['products'] [$ product_number],以便$ product_number包含您正在执行的步骤。

考虑以下示例:

$ _ SESSION [ '产品'] [55] = 2; //我们在这里的第2步 $ _SESSION [ '产品'] [56] = 1; //我们在这里的第1步

在每个页面上查看$ product_number是否!in_array()== false然后检索该值以确定您正在执行的步骤。