2009-02-26 2 views
0

컨텍스트 : 프런트 컨트롤러 페이지에서 session_enabled 페이지를로드 할 때 mod_rewrite (자식 페이지를로드하는 프론트 페이지)를 사용하여 응용 프로그램을 빌드하려고했습니다.두 개의 session_starts()가 PHP 응용 프로그램을 중단합니다.

문제점 : session_start() 호출 twise를 사용하면 PHP 페이지가 응답을 멈추는 문제가 있습니다. 이상하게도 session_start 함수는 무해하며 다른 페이지에서 호출됩니다.

child.php 파일 :

parent.php 파일 :

전화

나는이 샘플에 문제가 좁혀했습니다 parent.php로 설정하면 브라우저가 무한하게로드됩니다. session_start() 호출 중 하나를 언급하자마자 즉시로드됩니다.

문제점의 근원은 무엇입니까? 세션 사용 가능 페이지가 잘못 필요합니다.

추신 : 저는 페이지를 포함 시켜서 작업 할 수 있지만 URL 매개 변수에 의존합니다. 매개 변수 프록시 같은 것을 피하려고합니다.

답변

1

는 한 번에 사용할 수 있습니다. 새 ID를 생성하기 위해 session_regenerate_id function를 호출해야합니다

if (session_id() != '') { 
    session_write_close(); 
} 
session_start(); 
session_regenerate_id(); 

그렇지 않으면 부모의 세션 ID는 아이의 세션에 사용됩니다.

5

더 이상 세션에 쓸 필요가 없으면 session_write_close()으로 전화해야합니다. 현재 두 스크립트 모두 세션이 전체 기간 동안 열려 있기 때문에 한 번에 하나의 세션 만 실행할 수 있습니다. 세션 데이터는 일반적으로 session_write_close(), 를 호출하지만, 세션 데이터가 에 잠겨 같이 하나의 스크립트가 작동 할 수 있습니다 동시 쓰기를 방지하기 위해 필요없이 종료 스크립트 후 저장

: the manua 리터에서

어떤 세션에서든지 시간. 프레임 셋을 함께 사용하는 경우 세션에서이 잠금 때문에 하나씩 프레임로드가 발생합니다. 은 모든 프레임을로드하는 데 필요한 시간을 줄일 수 있습니다. 세션 변수의 변경이 완료되면 즉시 세션을 종료하는 으로 끝냅니다.

0

스크립트에 두 개의 session_starts()가있는 것이 좋지 않습니다.

parent.php 파일 (child.php 제외)에서 세션을 시작하지 않는 이유는 무엇입니까? 또는 parent.php가 아닌 child.php

모든 것을 초기화하는 모든 페이지 (SQL 연결, 세션 시작 등)에 포함되는 한 페이지를 갖는 것이 좋습니다. 그런 다음 다른 모든 페이지에 해당 페이지를 포함하십시오.

1

당신은 세션이 이미 시작되었는지도 확인에만 새 그렇지 않으면 시작할 수 있습니다 : 그 하나 개의 세션 게다가

if (!isset($_SESSION)) session_start(); 
+0

이 경우 세션은 동일한 페이지에서 시작되지 않습니다. – kmkaplan

+0

같은 페이지처럼 보입니다. 단지 다른 스크립트 일뿐입니다. 나는 세션을 시작할 필요가있을 때 ajax 호출과는 반대로 세션이 이미 시작되었을 때 초기 페이지로드시에 ajax include에서 동일한 세션을 사용하기 위해 이것을 사용했다. – jeroen

관련 문제