是否可以使用另一个变量作为会话变量的名称来定义会话变量?在研究如何定义会话变量时,我没有发现任何关于这种情况的信息。
我是新手CFML用户,这是我尝试设置的情况。我希望它不会太冗长和混乱。
我在每个页面上都有代码,当给定的网站用户在用户会话期间访问特定页面时,会向我发送电子邮件警报。工作良好。但是,我希望该电子邮件警报仅触发用户访问该页面的第一次时间 - 我不关心该用户在该用户会话期间对该页面的其他页面访问。
我需要定义一个对“那个用户/那个页面”组合唯一的会话变量。每当任何用户访问该页面时,我都会查找该变量。如果匹配,则表示用户在该用户会话期间已访问过该页面,并且未触发电子邮件警报。
对于“那个用户”部分,我已经为用户从用户登录时定义了一个会话变量(Session.Name)。
对于“那个页面”部分,我已经在每个页面的顶部定义了一个唯一的变量 - 例如
<cfset page_filename = 'index.cfm'>
难题:当两个部分之一(page_filename)本身是一个变量时,如何将两个部分(Name和page_filename)组合成一个唯一的会话变量。
到目前为止,我已尝试使用带有Session.Name的page_filename定义“Session.page_alert”
<cfset Session.page_alert = '#page_filename##Session.Name#'>
但是,一旦用户访问另一个页面,这就变得毫无用处,因为#page_filename#部分在每个页面上都不同,因此唯一的会话变量属于 new 页面,而不是上一页页面。如果用户返回上一页,则Session变量不再引用它,因此即使用户已经在那里,用户也会再次访问该第一页。
理想情况下,我想做一些像
这样的事情<cfset Session.#page_filename# = '#page_filename##Session.Name#'>
=============================================== ================ `
<!--- username variable Session.Name is defined upon user login --->
<!--- do a test display for existence of this variable --->
<cfoutput>
<p>SESSION.NAME = #Session.Name#
</cfoutput>
<!--- this part works fine --->
<!--- define page_filename local variable at top of each page --->
<cfset page_filename = 'index.cfm'><!--- example for one page --->
<!--- do a test display for existence of this variable --->
<cfoutput>
<p>PAGE_FILENAME = #page_filename#
</cfoutput>
<!--- this part works fine --->
<!--- attempt to define session variable using the page_filename variable defined above --->
<cfset Session[page_filename] = '#page_filename##Session.Name#'>
<!--- test display after attempt to define session variable --->
<cfoutput>
<p>SESSION.PAGE_FILENAME = #Session.page_filename#
</cfoutput>
<!--- this produces a CF error msg stating that "page_filename is undefined in Session" --->`
答案 0 :(得分:5)
<cfset Session[page_filename] = '#page_filename##Session.Name#'>
更新以下Request
范围的Session
范围对您的代码进行了修改。请将代码更改为Session
范围,将其与您所拥有的内容进行比较。
<!--- username variable Session.Name is defined upon user login --->
<cfset request.Name = "Username Foo">
<!--- do a test display for existence of this variable --->
<cfoutput>
<p>request.NAME = #request.Name#
</cfoutput>
<!--- this part works fine --->
<!--- define page_filename local variable at top of each page --->
<cfset page_filename = 'index.cfm'><!--- example for one page --->
<!--- do a test display for existence of this variable --->
<cfoutput>
<p>PAGE_FILENAME = #page_filename#
</cfoutput>
<!--- this part works fine --->
<!--- attempt to define session variable using the page_filename variable defined above --->
<cfset request[page_filename] = '#page_filename##request.Name#'>
<!--- test display after attempt to define session variable --->
<cfoutput>
<p>request.PAGE_FILENAME = #request[page_filename]#
</cfoutput>
在TryCF上运行我:http://trycf.com/scratch-pad/pastebin?id=W6KSYwZc
答案 1 :(得分:4)
我认为最干净的(在阅读代码和理解发生的事情方面)这样做的方式是:
<cfset session[page_filename] = page_filename & session.Name />
答案 2 :(得分:0)
你也可以使用
<cfset "session.#page_filename#" = "#page_filename##Session.Name#" />
希望这有帮助!