2011-02-14 4 views
4

사용자가 12 시간 동안 시간 초과하지 않도록 세션 시간을 늘리려고합니다. 이것은 직원들에 의해서만 사용되는 개인 사이트이며 시간 초과는 성가 시며 부분적으로 채워진 데이터가 손실 될 수 있습니다. 내가 읽은 것에 따르면 다음 코드가 작동해야합니다 :세션 시간 초과 시간을 늘리려고합니다.

ini_set('session.gc_maxlifetime',12*60*60); 
ini_set('session.gc_probability',1); 
ini_set('session.gc_divisor',1);   
session_start(); 

그러나 효과가 없습니다. 이견있는 사람? 세션 쿠키뿐만 아니라 만료 될 수

덕분에

답변

2

당신은 php.ini 파일에서의 session.gc_maxlifetime = 12 * 60 * 60 설정을 시도 할 수 있습니다. 그렇지 않으면 스크립트가 끝날 때마다 session.gc_maxlifetime 변수가 매번 재설정됩니다. php.net/ini_set에서

:

string ini_set (string $varname , string $newvalue)

는 주어진 구성 옵션의 값을 설정합니다. 구성 옵션은 스크립트가 실행되는 동안이 새 값을 유지하며 스크립트의 끝에서 복원됩니다.

1

나는 "개인 사이트"에 의해 당신은 전용 서버에서의 단독 의미가 있는지 확실하지 않습니다, 그렇지 않은 경우 :

세션 임시 파일은 다른과 같은 디렉토리에 저장되는 경우 사이트의 tmp 파일을 사용하면 다른 웹 사이트의 세션 수명이 낮아 가비지 수집을 트리거 할 수 있습니다. 은 "개인 사이트"세션을 삭제할 수 있습니다. 서버 설정에 따라 다릅니다. 개인적으로 나는 그런 일을 피하기 위해 각 클라이언트마다 tmp 폴더를 가지고 있습니다.

4
ini_set('session.gc_probability',1); 
ini_set('session.gc_divisor',1); 

이 두 가지로 인해 PHP는 사이트의 모든 조회수에 대해 세션 정리 스크립트를 실행해야합니다. GC의를 실행하는 PHP의 공식은 : 지금 당신이 1/1있어

if (random() < (gc_probability/gc_divisor)) then 
     run_session_garbage_collector() 
} 

때문에 가비지 컬렉터 실행되고 100 %의 확률. 타임 아웃 기간을 늘리는 것이 좋지만 콜렉터가 전혀 실행되지 않는 경우도 줄일 수 있습니다. 그렇지 않으면 PHP가 모든 세션 파일을 전체 검사하고 각 파일을 구문 분석하여 사이트의 모든 조회에 대해 만료 된 홀수 한두 개를 찾습니다.

가비지 수집기를 완전히 비활성화하려면 gc_probability를 0으로 설정하십시오.

물론, ini_set()을 사용하여 스크립트 내에서 설정을 변경해도 다른 스크립트가 사용하는 시간 초과/기본값은 변경되지 않습니다. 이 스크립트는 더 긴 타임 아웃과 변경된 확률을 가질 수 있지만, 다른 스크립트가 기본 타임 아웃 (10 분 또는 그 이상)을 가지고 있다면, 그들은 "낡은"세션을 행복하게 누설 할 것입니다.

세션 시간 제한/정리 설정을 지정하는 적절한 위치는 php.ini 수준에 있으므로이 스크립트가 사이트의 모든 스크립트에 적용됩니다.

1

session.gc_divisor는 session.gc_probability와 결합하여 모든 세션 초기화시 gc (가비지 수집) 프로세스가 시작될 확률을 정의합니다.확률은 gc_probability/gc_divisor를 사용하여 계산됩니다. 1/100은 각 요청에 대해 GC 프로세스가 시작될 확률이 1 %임을 의미합니다. session.gc_divisor는 기본적으로 100으로 설정됩니다.

1/1 - 실제로 어떻게 작동하는지 모르지만 이상한 행동 일 수 있습니다.

0

희망이 도움이 될 것입니다. 아래 코드를 복사하여 붙여 넣으십시오. web.config 파일

<sessionState mode="InProc" stateNetworkTimeout="10" sqlCommandTimeout="30" cookieName="ASP.NET_SessionId" timeout="53200" regenerateExpiredSessionId="false"> 
    <providers><clear/></providers> 
</sessionState>