使用选项卡式浏览保留会话变量

时间:2014-08-11 16:39:17

标签: coldfusion session-variables

对于此代码:

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#">

如果你这样做:

  • 浏览任何浏览器上的page1.cfm
  • 使用“value1”
  • 提交表单
  • 打开新标签页
  • 浏览到page1.cfm并使用“value2”
  • 提交表单
  • 返回第一个标签并刷新页面

您会注意到session.name的值在第一个选项卡上发生了变化。

this question中,其中一个答案之后是注释,“如果选项卡式浏览导致会话变量出现问题,那么您做错了”。

那怎么样,你做得好吗?目标是在第一个选项卡上保留“value1”,在第二个选项卡上保留“value2”。

1 个答案:

答案 0 :(得分:3)

希望Scott会在这里发表他自己的评论/答案,但我怀疑你误解了他的评论。你在这里描述的正是浏览一直对我有用的方式。在“选项卡式”浏览存在之前,当您打开一个新的浏览器窗口而不关闭现有浏览器窗口时,会出现同样的问题(无论您打开多少个浏览器窗口,今天仍然会发生这种情况)。 ColdFusion服务器仅为用户打开的每个浏览器实例维护一个会话。因此,当用户退出基于会话的应用程序时,我们所有人都会显示警告。在您退出所有浏览器窗口之前,“您的会话将不会完全关闭”。或者当他们登录时“您已经有一个活动的会话,您的其他会话将被终止”。然后是标签浏览。好的标签只不过是另一个浏览器实例,就像之前一样,只包含在同一个窗口中。

因此,选项卡式浏览不会导致会话变量出现问题,它们按设计工作。这是它的工作原理。这是预期的行为。你的期望是错的。我确信有一些方法可以使它按照您期望的方式工作,就像编程中一直存在的那样,但这与浏览器的设计方式相悖。这是你真正想要的方向吗?

重复问题 - How to differ sessions in browser-tabs?。你会看到一些例子,但它们都是黑客,试图使它的工作方式与设计不同。