2012-05-02 3 views
2

백그라운드에서 실행할 기본 스크립트에서 PHP 스크립트를 호출해야합니다. (그냥 호출하고 응답을 기다리지 않고 계속 진행합니다) 하지만 스크립트라는 사용자 세션에 액세스해야합니다.세션 액세스로 백그라운드에서 PHP 스크립트 실행

+0

왜 그 스크립트에서 사용자 세션에 액세스 할 수 없습니까? –

+0

wget을 사용하여 system() 호출로 스크립트를 호출하면 특정 세션에 더 이상 액세스 할 수 없습니다. – mgalesic

답변

2

내 조언은 백그라운드 프로세스로 작업 까다로운 일이 될 수 있기 때문에 기본 PHP 세션을 사용하지 않는 것입니다 .... 나는 좋은 예는 여기 http://www.php.net/manual/en/function.session-set-save-handler.php#96305

가있는 DB 기지 세션

에 대한 session_set_save_handlerhttp://www.php.net/manual/en/function.session-set-save-handler.php를 추천 할 것입니다

+0

네, 다른 소스에 세션 데이터를 저장한다고 생각합니다. – mgalesic

+1

예 .. 당신은 memcached 또는 mongoDB 사용할 수 있습니다 ... 더 나은 여전히 ​​ – Baba

+0

나는 memcache를 사용하여, 잘 작동합니다. 감사합니다. – mgalesic

-1
$_COOKIE['PHPSESSID'] = 'user_session_id';//Transfer parameters through $GLOBALS['argv'] 
session_start(); 
0

전화

$ MAXLEN = 0
string file_get_contents (string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]]) 

;

파일 이름에 URL을 지정할 수 있습니다. 그 url 세션 ID를 전달하고 호출 된 스크립트에서 session_id()를 사용하여 세션 ID를 설정 한 다음 session_start()를 호출하십시오.

호출 된 스크립트가 flush() 및 ob_flush()를 사용하여 최소한 520 개의 더미 문자를 반환하는지 확인하여 호출하는 스크립트가 대기하지 않도록하십시오.

0

"세션"의 핵심은 사용자 클라이언트가 "상태가없는"방식으로 여러 번 서버에 연결할 수 있지만 하나의 단일 연결처럼 "상태"를 유지할 수 있도록하기위한 것입니다. "세션"데이터는 동일한 사용자 클라이언트의 여러 연결간에 공유됩니다.

PHP를 사용하든 아니든 서버에서 백그라운드 프로세스를 시작할 때 "세션"에는 더 이상 중요한 의미가 없습니다. 사용자는 서버 백그라운드 프로세스에 영향을 미치지 않고 클라이언트 시스템을 종료 할 수도 있습니다.

다른 점에서 제안 된대로 쿠키를 사용한다는 것은 완전히 쓸모가 없습니다. 쿠키는 클라이언트 시스템에 저장되며 백그라운드 프로세스는 액세스 할 수 없게됩니다.

백그라운드 프로세스에 필요한 클라이언트 정보가있는 경우 호출 프로세스는 어떤 종류의 매개 변수 나 데이터 파일의 일부로 백그라운드 프로세스에이를 전달해야합니다.

임시 파일에 "$ _SESSION"변수를 Json으로 인코딩 된 데이터 문자열로 저장하는 것이 좋습니다. 백그라운드 프로세스는 해당 파일을 읽을 수 있고, Json으로 다시 배열로 디코딩 한 다음, 여전히 $ _SESSION 인 것처럼 사용할 수 있습니다. 그런 다음 임시 파일을 제거하십시오.

관련 문제