2010-12-22 3 views
1

나는 세션 변수에 상당히 의존하는 PHP 애플리케이션을 가지고있다. 로그인 후 사용자는 사용자가 누구인지에 따라 세션 변수로드를 설정하는 코드를 실행하는 페이지로 리디렉션됩니다. 응용 프로그램은 여러 소스의 데이터를 사용하며 세션은 ID 번호를 저장하여 데이터베이스를 쿼리하는 데 사용됩니다.PHP : 세션의 대안

그래서 사용자가 자산 관리 시스템에 쿼리 할 페이지로 이동하면 특정 데이터베이스에 대한 ID가 세션을 통해 호출됩니다.

저는 최근에 세션 변수에 많은 문제가있었습니다. 때로는 앱 수명 동안 단 하나의 세션 파일 만 생성되며 때로는 각 세션 요청으로 인해 새 세션 ID가 생성됩니다 (여전히 이유를 찾지 못했습니다!).

내 질문은 여기 있습니다. 이 세션 변수를 사용하는 대안이 있습니까? 지구 적 또는 다른 어떤 방식으로? 세션 PHP session variables not being maintaned

답변

2

또 다른 대안은 사용자에게 session_id와 함께 쿠키를 제공하는 데이터베이스에 세션 데이터를 저장하는 것입니다. 그러면 세션을보다 효과적으로 제어 할 수 있습니다.

+0

이게 좋겠지 만 각 세션 요청마다 새로운 세션 ID가 생성되는 문제가 있습니다. 따라서 세션 ID를 주면 세션 ID가 변경되거나 덮어 쓰기가됩니다. – iamjonesy

+0

사실 쿠키 문제입니다. 한 페이지에 쿠키를 만들고 다른 페이지로 이동하여 쿠키가 사라졌습니다. – iamjonesy

+0

이것은 ... 세션이 일반적으로 어쨌든 작동하는 방식이며, 서버는 php로 자동 생성 된 특정 세션 토큰을 저장합니다. 그런 관점에서 볼 때 실제로 얻은 것은 없습니다. – Kzqai

-1

대안은 (사실, 세션은 일반적으로 쿠키를 사용하여 구현된다) 쿠키입니다 -

나는 여기에 내 세션 문제에 대한 공개 질문이 있습니다. 그러나 쿠키를 저장하려면 작은 데이터 양을 저장해야합니다.

1

아니요, 각 사용자 세션은 하나의 값을 가져야하므로 어떤 종류의 세션 메커니즘이 필요합니다. 그리고 PHP 세션도 괜찮습니다. 필요에 따라 적절하게 구성하면됩니다.

2

다른 "세션"솔루션을 사용할 수도 있지만 배관을 더 많이해야합니다.

예를 들어 사이트를 생성하는 모든 URL에 sessionid가 포함 된 URL 기반 세션을 사용할 수 있습니다. 이것은 대개 사이트의 주요 재 설계이며 필요한 경우는 여러 도메인에서 동일한 세션을 유지해야하거나 동일한 컴퓨터가 브라우저의 다른 창에서 서로 다른 세션을 실행하도록하려는 경우에만 필요합니다.

하지만 귀하의 경우에는 세션이 왜 망가 졌는지, 구성상의 문제인지, 세션 파일을 망쳐 놓았는지 확인해 보겠습니다.

0

세션이 적합한 솔루션처럼 보인다)

나는 그들이 그냥 작동, PHP 세션에 어떤 문제가 없었습니다. 일반적으로 세션은 다음과 같이 작동합니다. 세션 개체가 서버에 만들어지고 ID가 할당됩니다. id는 쿠키로 브라우저에 보내지고 브라우저의 요청으로 서버로 보내 지므로 서버가 메모리에서 올바른 세션 객체를 가져올 수 있습니다.

세션 구성 방법을 확인하십시오. "잃어버린"세션을 유지하는 경우 한 가지 가능한 원인은 하위 도메인간에 "점프"하고 하나의 하위 도메인에만 세션 쿠키가 설정되어있을 수 있다는 것입니다. 또 다른 원인은 세션의 만료가 너무 낮을 수 있다는 것입니다.

+0

답장을 보내 주셔서 감사합니다. 여기에 세션 문제에 대한 질문이 있습니다. - http://stackoverflow.com/questions/4358525/php-session-variables-not-being-maintaned – iamjonesy

0

쿠키는 실제로 로그인에 사용될 때 변경 될 수 있습니다. 쿠키는 사용자가 변경할 수 있기 때문에 세션은 단지 자신의 컴퓨터에 식별 해시가 포함 된 쿠키를 저장하고 수정하지 않습니다. 그들 아주 멀리.

어쨌든, 세션 입니다. 문제는 의심의 여지없이 구현 문제입니다. 다른 방법을 구현하면 엄청나게 복잡한 코드가 생성되므로 세션 디버깅과 테스트에 시간을 투자하는 것이 좋습니다. 세션을 통해 문제가 발생하기 때문에 코드를 작성하고 싶지는 않습니다.

0

각 요청마다 다시 만들어지는 세션의 경우 서버에서 보내는 쿠키를 디버그하려고 시도해야합니다. 이 쿠키에서 쿠키 도메인이 올바른지 확인하고 쿠키 경로도 확인합니다.

쿠키를 디버깅하려면 웹 개발자 도구 모음을 사용하여 페이지로드 후에 어떤 쿠키가 활성화되어 있는지 표시 할 수 있습니다. 하지만 가장 유용한 도구는 Live Http 헤더이며 서버가 보낸 실제 헤더를 확인하면 실제 쿠키 내용을 찾을 수 있으며 쿠키 도메인에 불일치가있는 경우 (예를 들어 대부분의 경우 브라우저) 브라우저 귀하의 웹 사이트에이 쿠키를 저장하지 않습니다.

브라우저는 PHP가 다른 세션을 구축 요청 쿠키, 다음 페이지 등

을 무시하면 당신은 당신이했다 PHP에서 추적 세션 아이디의 옛날 방식을 추적 할 수있는 작업 cooki 시스템을 얻을 수없는 경우 PHPSESSID와 함께 영구 get 및/또는 post 매개 변수를 사용합니다. phpinfo 페이지에서 --enable-rans-id가 필요합니다 (phpinfo 페이지에서 확인하십시오) http://www.php.net/manual/en/session.idpassing.php