Различная длина тайм-аута сеанса Coldfusion

Редакторам веб-сайтов нужен длительный период входа в систему, и, поскольку вход в систему зависит от объема сеанса, период сеанса в настоящее время составляет 10 часов.

Это дает нам плохую производительность на переднем конце. Как я могу лучше всего разделить их?

Я нашел один способ заставить его работать, но хотел бы рассмотреть альтернативные решения, это истечет срок действия сеанса, если он не является пользователем-администратором.

<cfif NOT StructKeyExists( session, "user" )>
<cfscript>
  StructDelete(cookie, 'cfid');
  StructDelete(cookie, 'cftoken');
  session.setMaxInactiveInterval(1);
</cfscript>

The website is quite old and uses Application.cfm, I have tried adding another Application.cfm, which 'includes' the first, for the administration area with it's own but now each application gets confused over what cookie to create/use.

Я просмотрел такие ресурсы, как

https://misterdai.wordpress.com/2010/06/15/cf-sessionstop-ending-a-cf-session/

и

http://www.bennadel.com/blog/1847-explicitly-ending-a-coldfusion-session.htm

Я даже думал о переходе на Application.cfc, но это критично по времени, и там есть какой-то причудливый устаревший код, на отладку которого у меня нет времени.


person Daniel Cook    schedule 23.09.2016    source источник


Ответы (3)


Лучший способ — разделить внешний интерфейс и администрирование как два разных приложения. Поскольку вы не хотите конвертировать в Application.cfc (решение ниже), вы можете сделать это в своем Application.cfm

<cfapplication name="ApplicationName"
sessionmanagement="Yes"
sessiontimeout="#CreateTimeSpan('0','4','0','0')#">

Для Application.cfc

<cfset this.sessionManagement = true />
<cfset this.sessionTimeout = createTimeSpan( 0, 0, 5, 0 ) />
person Rado    schedule 24.09.2016
comment
Поскольку обоим приложениям нужно было использовать одни и те же переменные приложения, я переместил их в новый файл application_variables.cfm, а затем включил его в оба. Когда я включил файл приложения, в котором уже было определено «приложение», это вызвало некоторый конфликт. - person Daniel Cook; 26.09.2016
comment
Поскольку тайм-аут для приложения устанавливается только один раз, можно ли его сбросить (увеличить), когда админ входит в бэкэнд? Тогда у вас не будет накладных расходов на два сеанса и вам не придется управлять двумя файлами application.c**. - person Jules; 26.09.2016

У нас есть некоторые страницы, на редактирование которых пользователю приходится тратить много времени, что может привести к истечению времени сеанса. На этих конкретных страницах мы поддерживаем сеанс, включая другую страницу, которая находится в очень маленьком iframe. Эта страница выполняет метаобновление с заданным интервалом.

Мы сделали это многоразовым, написав два файла. Первый, PreventTimeout.cfm, вызывается следующим образом:

<cfinclude template="path goes here/PreventTimeout.cfml"> 

Он имеет этот код:

<cfparam name="RefreshMinutes" default="15" type="integer">
<cfset RefreshSeconds = RefreshMinutes * 60>
<cfoutput>
<iframe height="1" width="1" 
src="path goes here /PreventTimeoutIFrameContents.cfm?
RefreshSeconds=#RefreshSeconds#">
</iframe>
</cfoutput>

PreventTimeoutIFrameContents.cfm содержит метакод обновления.

person Dan Bracuk    schedule 23.09.2016

Если вы используете фреймы, добро пожаловать в этот фрагмент кода. У меня есть рамка слева от задней панели, в которой есть навигация по модулям cms (страницы, обзоры и т. д.).

введите здесь описание изображения

На этой левой странице навигационного фрейма:

<script type="text/javascript">
    setTimeout(function(){
        document.location.replace('nav.cfm');
    },900000);
</script>

Каждые 15 минут навигация перезагружается. Что составляет половину 30-минутного таймера сеанса по умолчанию. Поэтому срок действия сеанса не истекает, пока бэкэнд CMS открыт. Поскольку перезагружается только левый навигационный фрейм, фрейм содержимого (возможно, с открытым текстовым редактором) никогда не перезаписывается. Изменения не теряются.

person Jules    schedule 24.09.2016