考虑这个问题
我该如何防止这种情况发生。这是一个熟悉的问题,所以想要一个通用的解决方案。
答案 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然后检索该值以确定您正在执行的步骤。