对于此代码:
page1.cfm
<form action="page2.cfm" method="post">
<input type="text" name="name" />
<input type="submit" />
</form>
page2.cfm
<cfset session.name = form.name>
<cflocation url="page3.cfm" addtoken="no">
page3.cfm
<cfdump var="#session.name#">
如果你这样做:
您会注意到session.name的值在第一个选项卡上发生了变化。
在this question中,其中一个答案之后是注释,“如果选项卡式浏览导致会话变量出现问题,那么您做错了”。
那怎么样,你做得好吗?目标是在第一个选项卡上保留“value1”,在第二个选项卡上保留“value2”。
答案 0 :(得分:3)
希望Scott会在这里发表他自己的评论/答案,但我怀疑你误解了他的评论。你在这里描述的正是浏览一直对我有用的方式。在“选项卡式”浏览存在之前,当您打开一个新的浏览器窗口而不关闭现有浏览器窗口时,会出现同样的问题(无论您打开多少个浏览器窗口,今天仍然会发生这种情况)。 ColdFusion服务器仅为用户打开的每个浏览器实例维护一个会话。因此,当用户退出基于会话的应用程序时,我们所有人都会显示警告。在您退出所有浏览器窗口之前,“您的会话将不会完全关闭”。或者当他们登录时“您已经有一个活动的会话,您的其他会话将被终止”。然后是标签浏览。好的标签只不过是另一个浏览器实例,就像之前一样,只包含在同一个窗口中。
因此,选项卡式浏览不会导致会话变量出现问题,它们按设计工作。这是它的工作原理。这是预期的行为。你的期望是错的。我确信有一些方法可以使它按照您期望的方式工作,就像编程中一直存在的那样,但这与浏览器的设计方式相悖。这是你真正想要的方向吗?
重复问题 - How to differ sessions in browser-tabs?。你会看到一些例子,但它们都是黑客,试图使它的工作方式与设计不同。