2011-05-13 5 views
5

PHP 세션에서 모두 session_id의 목록을 가져 오는 것은 불가능합니까?모든 PHP 세션 목록 가져 오기

참고 : 서버에서 파일을 일부 유지해야합니다. 하나의 파일이 하나의 세션과 동일합니다. SESSION이 만료되면 이전 파일의 동작을 결정해야합니다.


조언 해 주셔서 감사합니다.

preg_grep("/^sess_/", scandir(ini_get("session.save_path"))) 

하지만 그 파일이 여전히 유효하는 당신에게 말할 것이다 :

+3

나는 그것이있을 때 수동으로 추적해야한다고 생각하지 않습니다. 이것을 위해 무엇이 필요합니까? –

+0

매쉬업 웹 앱을 만들고 Flickr의 '캔버스'에 세션에 이미지 하나를 삽입해야합니다. 그러나 캔버스는 원격 서버의 이미지를 사용할 수 없습니다. 그래서 PHP로 로컬로 저장 한 다음 사용합니다. 하지만 물론 임시 폴더를 정리해야합니다 - 세션 만료 된 파일이 필요하지 않은 경우. 그래서 새로운 세션이 만들어지면 임시 이미지에 ID가 동일한 활성 세션 만 포함되어 있는지 확인합니다. – LukasSvihel

답변

1

이전 프로젝트에서이 작업을 수행합니다.

_TMP_PATH_ : 파일이 확인하는 경로

내가는 SESSION_ID (: sessionid_some_file.tmp이 같은)와 파일 이름.

foreach(new DirectoryIterator(_TMP_PATH_) as $file) 
{ 
    if(preg_match('/(.*)_(.*)_(.*)\.tmp/', $file->getFilename(), $data)) 
    { 
     session_write_close(); 
     $session_id = $data[1]; 
     session_id($session_id); 
     session_start(); 
     if(empty($_SESSION)) 
     { 
      unlink(_TMP_PATH_ . $file->getFilename()); 
     } 
    } 
} 
session_write_close(); 

foreach 파일은 내가 session_id를 가져 와서 열고 내부에 뭔가가 있는지 테스트합니다. (각 세션을 연 후에 뭔가를 썼습니다.)

하지만이 코드는 프로덕션 환경에서 본 적이 없습니다.

+0

고마워요.이 작품을 수정 해주세요. – LukasSvihel

2

당신이 기존의 모든 세션 ID의 목록을 얻기 위해 할 수있는 최선이다. 그리고 나는 당신의 질문의 두 번째 부분을 정말로 얻지 못합니다. 그러나 특성을 조사하기 위해 수동으로이를 직렬화 해제 할 수 있습니다.

+0

이 코드는 작동하지 않습니다. 나는 에코가 맞습니까? 'echo $ temp = preg_grep ("/^sess_ /", scandir (ini_get ("session.save_path"))); echo $ temp [0]; ' – LukasSvihel

+1

print_r()'은 배열에서 더 잘 작동합니다. – mario

+0

감사합니다. 이제는 인쇄 정보입니다. – LukasSvihel

3

다른 사람들이 대답 했으므로 세션은 session.save_path에 정의 된 경로에 저장되고 php.ini에 있으며이 디렉터리를 반복하여 모든 세션의 목록을 검색 할 수 있습니다.

대체 접근 방식은 세션 저장 영역을 변경하고 session_set_save_handler()을 사용하여 데이터베이스로 이동하는 것입니다. 모든 세션을 데이터베이스에 저장하고 원하는대로 할 수 있습니다.

+0

그 좋은 아이디어지만,'php.ini'를 바꾸기 위해 접근 할 수없고'session.save_path'는 기본적으로'/ dev/shm' 존재하지 않는 경로로 설정됩니다 : ( – LukasSvihel