2012-10-29 1 views
3

에 있어도 session_start()는 랜덤, 수시로,이 에러를 보여준다 CakePHP는 2.2을 사용고지 (8) : I가 페이지를로드 할 때 CakePHP는 2.2

Notice (8): session_start(): ps_files_cleanup_dir: opendir(C:\Windows\TEMP) failed: No such file or directory (2) [CORE\Cake\Model\Datasource\CakeSession.php, line 615] 

임. 여기에 무슨 일 이니?

답변

1

세션 파일 저장을위한 디렉토리가 php.ini의 존재하지 않는 디렉토리로 설정되어있는 것 같습니다. 따라서 불평하는 디렉토리를 만들거나 sesssion.save_path php config 디렉토리를 지정하십시오.

7

PHP에 세션 가비지 수집기가있어 PHP 사이트에 액세스 할 때마다 실행될 확률이 있습니다. 당신은 그들이 gc_maxlifetime보다 오래된 경우 save_path에있는 sess_ <PHPSESSID> 파일을 삭제하는 gc_probability/gc_divisor의 기회

session.gc_probability 
session.gc_divisor 
session.gc_maxlifetime 
session.save_path 

http://www.php.net/manual/en/session.configuration.php

한 :이은으로 php.ini 파일에 정의되어 있습니다.

기본적으로 session.save_path는 Windows 서버의 경우 C : \ Windows \ Temp로 설정됩니다. 나는 이것이 거의 항상 존재한다고 의심 할 것이다.

고급 보안의 PHP 스크립트 (IIS를 말하는 경우 기본적으로 IUSR) "폴더 나열"권한을 실행하는 계정을 지정해야합니다. 이 권한은 구문 분석에 필요한 sess_ <PHPSESSID>의 실제 이름을 결정하기 위해 PHP가 C : \ Windows \ Temp (또는 사용자가 구성한 모든 위치)의 파일을 나열하는 데 사용됩니다. 그런 다음이 파일들 각각을 검토하고 수정 된 날짜가 maxlifetime보다 오래된 경우 파일을 삭제합니다. 목록 폴더를 제외하고 기본적으로 필요한 모든 권한이 입니다. 이상하게도 IIS_IUSRS (내가 믿는 응용 프로그램 풀에 사용되는 그룹)에는이 권한이 부여되지만 IUSR은 부여되지 않습니다.

"사용자"에게 트래버스 폴더 권한이 부여되고 파일 사용 권한을 부여했기 때문에 IUSR이 해당 파일을 만들 수 있습니다 (이 시점까지는 목록 작업이 수행되지 않습니다).PHPSESSID > 파일을 만들 수 있습니다. IUSR은 here 테스트를 수행 한 Authenticated Users 또는 Users 그룹의 암묵적인 멤버 인 것으로 보입니다. 또한 소유자에게 자신이 만든 파일에 대한 모든 권한을 부여하는 특수한 "CREATOR OWNER"권한 세트가 있습니다. 여기서 IUSR은 실제로 파일을 삭제할 수있는 권한을 얻습니다. 다소 복잡하지만, 걱정해야 할 것은 '목록 폴더'뿐입니다.

1

Config/core.php에서 cackphp의 세션 저장 경로를 변경할 수 있습니다.

해당 파일의 다음 주석을 확인하십시오.

* The built in defaults are: 
* 
* - 'php' - Uses settings defined in your php.ini. 
* - 'cake' - Saves session files in CakePHP's /tmp directory. 
* - 'database' - Uses CakePHP's database sessions. 
* - 'cache' - Use the Cache class to save sessions. 
* 
* To define a custom session handler, save it at /app/Model/Datasource/Session/<name>.php. 
* Make sure the class implements `CakeSessionHandlerInterface` and set Session.handler to <name> 
* 
* To use database sessions, run the app/Config/Schema/sessions.php schema using 
* the cake shell command: cake schema create Sessions 
* 
*/ 
    Configure::write('Session', array(
     'defaults' => 'cake' 
    )); 
+0

내가 CakePHP의에 대해 잘 알고 있지만, 당신은 "이 CakePHP의/tmp 디렉토리는"하게 사용하는 경우, 지적 싶어하지 않는 * 확실히 * 사용자가 검색 할 수없는 /이 가능한 한 /이, 여기에 파일에 액세스 읽기 그들은 세션 ID를 얻고 다른 사람의 세션을 하이 잭 (hejack) 할 수 있습니다. 그리고 사용자가 액세스해야하는 다른 파일에/tmp가 사용되면 이는 좋은 옵션이 아닐 수 있습니다. – Gremio

+0

''defaults '=>'php ''를''defaults'=> 'cake ''로 바꾸 었습니다. 감사!!! –