2016-09-23 3 views
0

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

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

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

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

Сайт довольно старый и использует Application.cfm, я попытался добавить еще один Application.cfm, который «включает в себя» первым, для администрации области с собственным, но теперь каждое приложение получает путают над тем, какой cookie создавать/использовать.

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

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, но это время критического и есть некоторое изворотливое наследие кода там у меня нет времени на отладку.

ответ

1

Лучший способ состоит в том, чтобы разделить интерфейс и администратор как два разных приложения. Поскольку вы не хотите конвертировать в Application.cfc (ниже), вы можете сделать это в своем приложении.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) /> 
+0

Поскольку оба Приложения, необходимые для использования те же переменные приложения, я переехал тех новый файл application_variables.cfm - тогда я включил, что в обоих случаях. Когда я включил файл приложения, который уже определил , это вызвало некоторый конфликт. –

+0

Поскольку тайм-аут установлен только один раз для приложения, можете ли вы его восстановить (увеличить), когда администратор войдет в задний конец? Тогда у вас не будет накладных расходов на две сессии, и вам не придется управлять двумя файлами application.c **. – Jules

1

У нас есть несколько страниц, на которых пользователь должен тратить много времени на редактирование, которое потенциально может сократить время их сеанса. На этих конкретных страницах мы сохраняем сеанс, включив еще одну страницу, которая находится в очень маленьком 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 имеет мета-код обновления.

1

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

enter image description here

В этой левой странице нав кадров:

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

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

Смежные вопросы