2009-06-22 2 views
2

최근 응용 프로그램에없는 사용자의 로컬 맞춤 티켓 시스템에 항목이 표시되는 흥미로운 버그가 발생했습니다. 주위에 몇 가지 파고 후 나는이 같은 PHP 응용 프로그램과 동일한 서버에서 실행중인 인증 목적을 위해 $ _SESSION [ 'user']를 사용하고 있다는 것을 깨달았다. 누군가 한 시스템을 사용하고 다른 시스템을 열었을 때 그는 첫 번째 앱에서 사용자로 "자동으로"로그인했습니다.PHP의 세션 충돌 방지

필자는 의무적 인 facepalm 후에 시스템 중 하나에서 세션 변수 이름을 변경하여이를 중지했습니다. 그러나 나는 미래의 프로젝트에서 이것을 피하기 위해 세션 처리 클래스에 영구적 인 유지 관리 변경을해야합니다. 나는 이것이 다른 변수에 의해 사용되지 않을 $ _SESSION의 장소에 앱의 변수를 넣기 위해 고유 한 값 (예를 들어 스크립트 경로)을 사용함으로써 이루어질 수 있다고 생각한다.

더 좋은 방법이 있습니까?

편집 : 이것은 Linux입니다. 두 앱 모두 같은 웹 사이트에 있습니다.

+0

Windows 또는 Linux의 PHP는 무엇입니까? 두 앱이 같은 웹 사이트에 있습니까? – Kev

답변

3

쿠키의 도메인과 경로가 제한적으로 설정되도록하여 세션 쿠키가 응용 프로그램에만 적용되도록 할 수 있습니다. http://www.example.com/apppath에서 응용 프로그램에 대해 다음을 수행 할 수 있습니다 :

<?php 

$currentParams = session_get_cookie_params(); 

session_set_cookie_params($currentParams['lifetime'], '/apppath/', 'www.example.com', $currentParams['secure'], $currentParams['httponly']); 

session_start(); 

이 그대로 다른 세션 설정을 떠날 것이다.

경로가 중요 할 것입니다. 기본적으로 PHP는 사이트가 요청 된 도메인에 대한 쿠키를 발급합니다 (나는 생각합니다). 따라서 실제로 도메인 매개 변수를 기본값으로 남겨 둘 수 있습니다.

1

각 앱이 자체 경로에 유효한 세션 쿠키 만 저장하도록 쿠키 경로를 설정하십시오.

session_set_cookie_params 호출로이 작업을 수행 할 수 있습니다.

0

공유 호스팅의 경우 서버에 세션 ID를 저장하는 대신 데이터베이스에 세션 ID를 저장하는 것이 좋습니다. 세션 ID를 데이터베이스에 저장하는 방법에 대한 자료가 많이 있으며, 정기적으로 로그를 변경합니다. 사용자 세션 ID는 securtiy를 개선하고 충돌을 줄일 수 있습니다.