为了响应任何包含非ASCII字符的cookie的请求,ColdFusion 11似乎崩溃了.IIS 8.5返回HTTP 500内部服务器错误(空白页).
重现步骤:
在Javascript控制台中运行以下命令并尝试加载任何CFML页面:
document.cookie="a=ñ";
(可选)请求任何.html或.txt文件并接收正常响应.
请求任何ColdFusion页面并收到空白页,HTTP 500内部服务器错误.
唯一的解决方法是清除浏览器cookie.
环境:
我已经尝试添加-Dfile.encoding=UTF-8
Java参数.
我没有在ColdFusion上找到其他人遇到这个问题.在Tomcat上运行Java代码存在类似的问题.但是,由于ColdFusion 11与Tomcat捆绑在一起,我甚至不知道Tomcat的运行版本以及如何升级它.(看起来ColdFusion 10运行Tomcat 7)Adobe似乎没有关于ColdFusion 11的Tomcat层的文档(特别是它与ColdFusion的关系).我已尝试将<CookieProcessor />
配置应用于context.xml,如其他帖子所示.我已发布到Adobe bug基础并且未收到任何响应.
欢迎任何想法.不幸的是,我们在cookie中有很多用户使用"Español",我们无法执行任何ColdFusion代码来清除或更改它.我们在ColdFusion 9中没有遇到这个问题,并且在升级到ColdFusion 11之后在QA检查中错过了这个问题.
coldfusion-error.log完全例外:
Sep 03, 2015 11:43:58 PM org.apache.coyote.ajp.AjpProcessor process
SEVERE: Error processing request
java.lang.IllegalArgumentException: Control character in cookie value or attribute.
at org.apache.tomcat.util.http.CookieSupport.isHttpSeparator(CookieSupport.java:193)
at org.apache.tomcat.util.http.Cookies.getTokenEndPosition(Cookies.java:502)
at org.apache.tomcat.util.http.Cookies.processCookieHeader(Cookies.java:349)
at org.apache.tomcat.util.http.Cookies.processCookies(Cookies.java:168)
at org.apache.tomcat.util.http.Cookies.getCookieCount(Cookies.java:106)
at org.apache.catalina.connector.CoyoteAdapter.parseSessionCookiesId(CoyoteAdapter.java:986)
at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:743)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:417)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:199)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at …
Run Code Online (Sandbox Code Playgroud) 我在Web服务器上的磁盘空间不足.由于日志存储在另一个驱动器上,并且网站没有任何新文件,因此必须进行其他操作.
我发现ColdFusion 10附带的Tomcat服务是在这个文件夹{ColdFusion Root}\cfusion\runtime\logs中为每个网页请求编写日志文件.他们占了8GB的磁盘空间!
文件名采用以下格式:localhost_access_log.YYYY-MM-DD.txt
如果您在ColdFusion服务器上运行单个站点,则可能没问题.日志文件的问题是它们只显示请求的SCRIPT_NAME和QUERY_STRING.您将无法确定"/index.cfm"请求适用于哪个站点.也许它可以配置为包含站点主机名.
我宁愿禁用此日志记录,因为IIS日志记录更具信息性.
我正在处理从ColdFusion 9到ColdFusion 11的迁移.我遇到的一个问题与此问题中详述的问题基本相同:cf10无法向HTML Head添加文本
在我的情况下,根本原因是一个特定的页面,其重量约为3 MB,大于输出缓冲区(默认为1024 KB),并导致CF刷新缓存.这反过来打破了对cfhtmlhead
in 的呼叫OnRequestEnd()
.
重新设计页面现在不是一个实用的解决方案.(也许将来.)我的问题是通过将"最大输出缓冲区大小"增加到4096 KB来"解决".
增加这个价值有哪些风险?此服务器上还有其他应用程序/站点.可能有记忆问题吗?性能下降?(试图找到这方面的参考令人沮丧.)
较低的输出缓冲区大小可能会减少某些应用程序中的内存占用.
服务器和JVM似乎有足够的内存.
由于对于哪种设置似乎存在一些混淆:
我有一个名为变量的变量date1
,它包含使用生成的ColdFusion日期/时间对象parseDateTime
.当我转储变量时,我得到了{ts '2014-12-20 15:46:57'}
.
我有另一个变量date2
,它包含另一个生成的ColdFusion日期/时间对象dateConvert("local2utc",now())
.当我转储变量时,我得到了{ts '2014-12-20 15:49:40'}
.
但是,当我这样做时,dateDiff("s",date1,date2)
我得到-21436,这是太多秒.任何人都可以解释为什么会这样吗?我认为这可能是一个时区问题,但我无法理解它.
Repro代码
<cfset dtString = "Saturday, December 20, 2014 05:07:30 PM">
<cfset dtObject = parseDateTime(dtString)>
<cfdump var="#dtObject#">
<cfset utcNow = dateConvert("local2utc",now())>
<br><br><cfdump var="#utcNow#">
<br><br><cfdump var="#dateDiff("s",dtObject,utcNow)#">
Run Code Online (Sandbox Code Playgroud) 我有一个问题,复制PHP和Coldfusion生成的相同结果.
在PHP加密这种方式:
<?php
$key = "$224455@";
$Valor = "TESTE";
$base = chop(base64_encode(mcrypt_encrypt(MCRYPT_DES, $key, $Valor, MCRYPT_MODE_ECB)));
?>
Run Code Online (Sandbox Code Playgroud)
我有结果:
TzwRx5Bxoa0 =
在Coldfusion这样做:
<cfset Valor = "TESTE">
<cfset Key = "$224455@">
<cfset base = Encrypt(Valor,ToBase64(Key),"DES/ECB/PKCS5Padding","BASE64")>
Run Code Online (Sandbox Code Playgroud)
结果:
qOQnhdxiIKs =
什么不是ColdFusion产生与PHP相同的价值?
非常感谢你
如果我的ColdFusion脚本中有错误,我从IIS而不是ColdFusion收到500错误消息.只有当我在URL中提供文件名时才会发生这种情况,如果我打开没有脚本名称的URL(这将打开index.cfm),则不会发生这种情况.
例如:
我可以在我的3个ColdFusion平台中的2个重现此问题:
我的index.cfm和foobar.cfm:
<!--- provoke a coldfusion error --->
<cfset foo
Run Code Online (Sandbox Code Playgroud)
我的web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="PassThrough" />
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
对我来说,看起来与IIS 8和IIS 8.5的ColdFusion连接器有问题.
任何人在ColdFusion 11中遇到cfflush标签问题?我们有一个例程,它在处理循环时更新实时记录计数.在ColdFusion 10中,这很好用.在ColdFusion 11中,它会一直等到循环结束才能更新屏幕.不是我们所期望的.
编辑按要求添加代码...
<script language="javascript">
addOutputLine('<br /><span id="insertCount">Records Inserted: 0</span>')
</script>
<cfset insertCount = 0>
<cfset updateCountAfter = 1>
<cfif qry.recordcount gt 5000>
<cfset updateCountAfter = 10>
</cfif>
<cfoutput query="qry" startrow="#DATASTART#">
<!---do some stuff here that is not important to this issue--->
<cfset insertCount = insertCount + 1>
<cfif updateCountAfter gt 1>
<cfif insertCount mod updateCountAfter eq 0>
<script language="javascript">document.getElementById('insertCount').innerHTML = 'Records Inserted: #insertCount#';</script>
</cfif>
<cfelse>
<script language="javascript">document.getElementById('insertCount').innerHTML = 'Records Inserted: #insertCount#';</script>
</cfif>
<cfflush>
</cfoutput>
Run Code Online (Sandbox Code Playgroud) 我的数据库结构主要由每个表的多个主键组成,因此每个连接需要多个列.我正在尝试使用ColdFusion(11具体)ORM集合属性.似乎该fkColumn
属性中以逗号分隔的列列表不起作用,就像它对关系属性一样.我已经向Adobe提交了一个错误,但我想知道是否有其他人遇到过此问题并找到了解决方法.或者也许我只是做错了..
表设置
Years Staff StaffSites Sites
=========== ============ ============ ===========
YearID (PK) StaffID (PK) YearID (PK) SiteID (PK)
YearName StaffName StaffID (PK) SiteName
SiteID (PK)
Run Code Online (Sandbox Code Playgroud)
工作人员ORM CFC
component persistent=true table='Staff' {
property name='id' column='StaffID' fieldType='id';
property name='year' column='YearID' fieldType='id';
property name='sites' elementColumn='SiteID' fieldType='collection' table='StaffSites' fkColumn='StaffID,YearID';
}
Run Code Online (Sandbox Code Playgroud)
问题
运行生成的查询时出错: [Macromedia][SQLServer JDBC Driver][SQLServer]An expression of non-boolean type specified in a context where a condition is expected, near ','.
看一下生成的查询,似乎没有为where
子句正确解析列的列表,但它有点理解select
表达式中有多个列.
select …
Run Code Online (Sandbox Code Playgroud) 我有一个WCF WebService我想使用ColdFusion消费.常规过程是使用CFHTTP在WSDL中使用SOAP请求.通常,这是有效的,一切正常.
<cfsavecontent variable="xmlBody" >
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
<soap:Header/>
<soap:Body>
<tem:GetVersion/>
</soap:Body>
</soap:Envelope>
</cfsavecontent>
Run Code Online (Sandbox Code Playgroud)
<cfhttp url="https://www.example.com/OtherService.svc?wsdl" method="post" timeout="1200" username="myUsername" password="myPassword" >
<cfhttpparam type="header" name="Content-Type" value="application/soap+xml;charset=UTF-8">
<cfhttpparam type="header" name="Content-Length" value="#len(trim(xmlbody))#">
<cfhttpparam type="header" name="soapAction" value="http://tempuri.org/GetVersion">
<cfhttpparam type="body" name="body" value="#trim(xmlBody)#">
</cfhttp>
<cfdump var="#cfhttp#">
Run Code Online (Sandbox Code Playgroud)
运行页面后,我得到了The security context token is expired or is not valid. The message was not processed.
回复.在阅读服务提供商提供的文档时,似乎我不能只将XML发布到URL并将其称为一天:
While WCF uses XML to post communications to the endpoint, it is required that users use Visual Studio's "Add Service Reference" or svcutil.exe …
在ColdFusion 11中,我使用cfSpreadsheet将.xls文件转换为查询对象.以下是我的演示电子表格的屏幕截图:
我使用此代码在创建后立即查看查询对象:
<cfspreadsheet action="read" src="demo_spreadsheet.xls"
excludeHeaderRow="true"
headerrow="1" query="demo_query"/>
<cfdump var="#demo_query#">
Run Code Online (Sandbox Code Playgroud)
......我得到了这些结果:
请注意,我在电子表格中的所有4位数年份现在都是2位数年份?当我使用以下代码输出查询对象中的数据时:
<ul>
<cfoutput query="demo_query">
<li>#name# - #dateformat(start_date, 'medium')#</li>
</cfoutput>
</ul>
Run Code Online (Sandbox Code Playgroud)
...我得到以下输出(好吧,我是新来的,所以我不能发布超过两个屏幕截图,所以你必须相信我这个复制/粘贴):
1907年现在是2007年,1917年现在是2017年,1929年现在是2029年,2030年现在是1930年.似乎在1930年1月1日之前的任何日期的年份被读作20xx,并且在12月31日之后,2029年被读作19xx年.
我错过了什么吗?我以为我们用Y2K想出了这种事情.在某处我有不正确的简单设置吗?我已经用Google搜索了这个问题,我找不到任何相关信息.
任何建议都是最受欢迎的.
coldfusion-11 ×10
coldfusion ×9
tomcat ×2
.net ×1
collections ×1
cookies ×1
encryption ×1
excel ×1
iis-8 ×1
iis-8.5 ×1
jwplayer ×1
orm ×1
php ×1
wcf ×1
web-services ×1