首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onRequestStart CFWheels

onRequestStart CFWheels
EN

Stack Overflow用户
提问于 2014-05-02 21:59:46
回答 3查看 232关注 0票数 0

我在cf轮上遇到了一些并发问题。

我在events/onrequeststart.cfm中有一些代码,每次用户请求时都会执行这些代码。

测试用例:用户A-请求时间:10秒用户B-请求时间:2秒

如果用户B在用户A已经在处理请求时发出请求,则用户的B设置将进入用户A,用户A将根据用户的B请求显示结果。

我试着在onrequeststart.cfm上使用cflock,但它似乎不起作用。我对车轮没有太多的经验,所以我可能尝试做一些逻辑错误的事情。

这是引起混淆的代码的一部分。

代码语言:javascript
复制
    <cfquery name="currentUser" datasource="#application.ds#">
        select * from clientadmin where clientAdminid ='#session.clientadminid#'
    </cfquery>

    <cfquery name="currentClient" datasource="#application.ds#">
        select * from clientBrands where clientbrandID ='#currentUser.ClientBrandID#'
    </cfquery>



<cfset application.clientAdminSurveys = application.generalFunctions.clientSurveys(clientAdminID=session.clientAdminID, clientBrandID = currentUser.clientBrandID)>
<cfset application.AssociatedDoctors = application.generalFunctions.AssociatedDoctors(clientAdminID=session.clientAdminID, clientBrandID = currentUser.clientBrandID)>

所以,我想我的问题是,如何避免这种情况发生?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-03 09:23:50

1)应用程序作用域是“应用程序范围”(站点范围内的所有用户)--您不应该设置每个用户的设置,正如您已经发现的那样,用户B覆盖用户A。为每个用户的内容使用会话范围。因此,在最后两行中,您将使用会话范围数据来设置应用程序作用域!

2)顺便提一句,在轮子中,您可以使用application.wheels.datasourcename获取数据库名称

票数 6
EN

Stack Overflow用户

发布于 2014-06-09 17:10:40

我会将该代码放入控制器(controller.cfc)中的一个函数中,并使用过滤器运行它。

请参阅:http://cfwheels.org/docs/1-1/chapter/filters

这对我来说是有效的,没有类似任务的问题。

另外,我会删除对application.的任何引用,因为这很可能是项目混淆的地方。将这些函数放入events/functions.cfm中的正确位置

当然没有看到更多你的代码..。

票数 0
EN

Stack Overflow用户

发布于 2015-02-19 21:05:05

正如Neokoenig所提到的,您正在使用共享范围存储特定于用户的数据,您应该在会话中存储这些数据。如果您需要应用程序范围中的数据,您应该在设置数据时使用锁,但是看起来您应该在onSessionStart中运行一次,而不是在每个请求上运行。如果您需要对每个请求运行它,您可能希望继续使用onRequestStart,但使用特定于用户的会话存储,而不是全局应用程序层。

请记住:应用程序变量将为所有用户显示相同的数据。因此,如果用户a设置application.foo =1,用户b设置application.foo = 2,那么用户1将尝试访问application.foo,用户1将看到用户2的值2。如果使用会话范围,则不会出现相同的问题。如果用户1设置SESSION.foo =1,用户2设置SESSION.foo =2。当用户访问SESSION.foo变量时,它将只包含该用户设置的数据集(例如:用户1将输出SESSION.foo并查看值,1)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23437599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档