代码之家  ›  专栏  ›  技术社区  ›  Abdul Rehman

从内存到redis的coldfusion设置会话不工作

  •  0
  • Abdul Rehman  · 技术社区  · 6 年前

    我有一个非常简单的脚本,它在循环中增加session变量,其中包含一个sleep 1秒调用。 在状态.cfm我转储了session变量,可以看到它的增量;通过不时刷新页面。

    但是,当我将会话管理从内存更改为redis时,会发生的是会话不会在循环中递增,当脚本结束时,它会存储循环的最后一个值。所以如果开了状态.cfm页面如果我不断刷新它不会反映更改,直到循环脚本完成并只显示最后一个值,这不符合我监视会话更改的目的。

    指数1.cfm

    <cfloop index="i" from="1" to="10">
        <cfscript>sleep(1000)</cfscript>
        <cfset session.counter.foo = i>
    </cfloop>
    
    <cfdump var="#session.counter#">
    

    Checking status...
    <cfdump var="#session.counter#">
    

    2) 问题是tread结果没有保存在session中,并给出以下消息而不是thread result对象。

    coldfusion.runtime.SessionScope$Serialization Problem

    指数2.cfm

    Setting Threads struct {foo="bar", details={}}....
    <cfset session.threads_foo = "bar">
    <cfset session.thread_details = structNew()>
    
    Creating Thread and dumping....
    <cfthread action="run" name="thread01">
        <cfscript>sleep(2000);</cfscript>
        <cfset thread.j=1>
        <cfloop index="i" from="1" to="999999">
            <cfset thread.j=thread.j+1>
        </cfloop>
    </cfthread>
    
    
    <cfset session.thread_details = thread01>
    
    Dumping session variable...
    <cfdump var="#session#">
    [DONE]<br><br>
    

    Checking status session threads status...
    <cfdump var="#session#">
    

    在PHP中,session\u write\u close()函数关闭session的文件锁,这样就不用等到脚本结束,session文件就可以访问了。在coldfusion有这样的东西吗?我不确定,即使这样的功能存在,它将有助于redis会话,这已经是一个内存存储,而不是文件。

    请引导

    0 回复  |  直到 6 年前
    推荐文章