Параметр хранения сеанса coldfusion из памяти в redis не работает должным образом - PullRequest
2 голосов
/ 08 апреля 2020

1) У меня есть очень простой скрипт, который увеличивает переменную сеанса на l oop с вызовом в режиме ожидания 1 секунда. В файле status.cfm я сбросил переменную сеанса и вижу ее приращение; обновляя страницу время от времени.

Но когда я переключаю управление сессией с памяти на redis, то происходит то, что сессия не увеличивается в l oop, и когда сценарий заканчивается, то в этот момент он сохранить последнее значение l oop. Поэтому, если на странице status.cfm я продолжаю обновлять, она не отражает изменения до тех пор, пока не будет завершен сценарий l oop, и покажет только последнее значение, что не соответствует моей цели мониторинга изменений в сеансе.

index1.cfm

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

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

status1.cfm

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

2) Тот же сценарий, что и в первом пункте, но на этот раз для потока. И проблема в том, что результат протектора не сохраняется в сеансе и выдает следующее сообщение вместо объекта результата потока.

coldfusion.runtime.SessionScope$Serialization Problem

index2.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>

status2.cfm

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

В PHP есть функция session_write_close (), которая закрывает блокировку файла сессии, поэтому она не ожидает завершения сценария и доступа к файлу сеанса. Есть ли что-нибудь в холодном синтезе, как это? Я не уверен, что даже если такая функция существует, она поможет в сеансе redis, который уже является хранилищем памяти, а не файлом.

, пожалуйста, руководство

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...