我有一个 Java Web 应用程序,它在 session 中存储一些数据。 session 中的数据随着用户与应用程序的交互而变化(例如,流程由 Controller 管理,每个 Controller 有多个表单页面,在每个表单页面上, session 中的一些数据会更新,流程会转到下一个表单页面)。
问题在于,一些用户向应用程序打开了多个选项卡,每个选项卡在流程中都有不同的步骤。此时 session 中的数据困惑了,因为选项卡共享同一个 session (应用程序使用 cookie 管理的 session )。
告诉用户使用不同的浏览器以避免共享相同的 session id(例如一个 Firefox 窗口和一个 IE 窗口)不是一种选择,因为在某些时候肯定有人会忘记这样做,而是使用标签,从而搞砸了他们的数据。
添加一些验证来检测从另一个选项卡请求另一个流并向用户显示一条消息说这是不允许的,这也不是一种选择,因为它惹恼了用户,我们不希望这样吗? :D
事实上,使用另一个选项卡对用户很有用,因为他们使用应用程序的效率更高,所以我保留了这个选项。但现在的问题是如何最好地管理多个标签的一个 session 数据?
我的想法是让 Controller 在启动流程时生成一个 token ,并将此 token 传递给每个表单页面,然后将其发送回以标识自己。如果另一个选项卡在正在进行的流程中请求相同的 Controller 操作,则生成另一个 token 并传递它。
基本上,我希望每个流都有一个 token ,并且在 session 中我不会只保留一组数据,而是为每个 token 保存一组数据,然后根据 token 匹配请求。
现在的问题是,这种方法需要对应用程序进行大量重写,我想知道是否有管理这种情况的最佳实践,或者有人可以建议其他方法。我对想法持开放态度。
你遇到过这种情况吗?你是怎么处理的?
最佳答案
这通常是通过为每个选项卡/窗口分配一个 windowId 并在每个请求上传递它来完成的。 Jsf 通过 orchestra 支持此功能. Spring mvc下个版本会支持的。
我最近需要一个简单的案例,所以我自己实现了它。花了半个小时。但是,我的范围非常有限:
windowId每个请求,并将其返回给下一个请求。第一次 - 生成它。Map<String, Object>其中关键是windowId 关于java - 管理多个选项卡的 webapp session 数据/ Controller 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479995/
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2