是否可以将ColdFusion会话转储到SQL数据库中?我有很多会话值,我想要的是将它们全部转储到数据库中。我不知道是否必须将每个值写入数据库或者如果我可以只有一个庞大的会话来转储所有用于数据库的值或变量。基本上我所拥有的是一个结账表单,他们填写了很多问题,然后在最后一页确认。当他们点击确认时,我希望他们在整个会话中输入的所有内容都转储到数据库中。有谁知道我在哪里可以找到这样的例子或者可以提供一个?
答案 0 :(得分:3)
如果您的会话有任何复杂性,您实际上可以使用objectSave()来获得全面的内容。这样,您可以存储会话中可能包含的对象。虽然它仍然有限,但它是任何解决方案中最灵活的。 。这是一个例子:
<cfscript>
// add an object to your session
session.fun_obj = createObject( "java", "java.util.Random").init();
// convert session to binary
sessionEncoded = charsetEncode( objectSave( session ), "iso-8859-1" );
// fake inserting data into a query / reading from query
qry = queryNew( 'id,session_object', 'varchar,varchar', {id : 1, session_object : sessionEncoded } );
// clear the session to prove it works
structClear( session );
writeDump( session, "browser", "html", false, "Your empty Session:" );
// try to use an object in the session, it will fail
try{
writeOutput( session.fun_obj.nextInt() );
}
catch(any e){
writeOutput("Failed, method not found<br>");
}
// read out session from db, and append to our session
structAppend( session, objectLoad( charsetDecode( qry.session_object[1], "iso-8859-1" ) ) , true );
// show that we have our object back in session key
writeOutput( "Here is your random int: " & session.fun_obj.nextInt() & "<br>" );
// show off the session
writeDump( session, "browser", "html", true, "Your Session:" );
</cfscript>
有一点需要注意,如果您尝试使用无法理解的objectSave()存储某些内容,它将不会抛出错误,它会忽略它。例如,session.myfunction = function(){writeOutput('hello')};不会序列化,但它也不会抛出错误。
参考:https://wikidocs.adobe.com/wiki/display/coldfusionen/ObjectSave
答案 1 :(得分:2)
要完全按照自己的意愿行事,请执行以下操作:
<cfsavecontent variable="sessiondata">
<cfdump var="#session#" format="text">
</cfsavecontent>
<cfquery>
insert into table
(sessiondata)
values
(<cfqueryparam cfsqltype="cf_sql_varchar" value=#SessionData#">)
它快速而简单,为您提供难以做任何事情的数据。如果是我,我会做这样的事情:
<cfoutput>
<cfloop collection="#session#" item="x">
key is #x# value is #session[x]# <br />
</cfloop>
</cfoutput>
除了显示键值对外,我不会将它们以规范化的方式存储在关系数据库中。