2013-12-16 2 views
0

내 사이트의 개별 디렉토리에 별도의 쿠키를 저장해야합니다. 이 방법을 수행 할 수있는 방법에 대한 여러 기사를 읽었지만 나에게 적합한 솔루션을 얻을 수 없었습니다. I는 각 페이지 (COOKIE_PATH = '/city_dir/')에 이들 라인 중 하나를 수행하고 :다른 경로에 대해 다른 세션 쿠키

session_set_cookie_params($lifetimeSeconds, COOKIE_PATH); 

또는

session_save_path(COOKIE_PATH); 

의해 따랐다

if (isset($_COOKIE['PHPSESSID'])){ 
    $data = $_COOKIE['PHPSESSID']; 
    $timeout = time() + $lifetimeSeconds; 
    session_start(); 
    setcookie('PHPSESSID', $data, $timeout); 
} 
else { 
    session_start(); 
} 
session_regenerate_id(true); 

(session_set_cookie_params)이 올바른 용액 같았 첫번째 행 하지만 그 행을 사용하면 Chrome 웹 개발자 도구 목록에 쿠키가 전혀 표시되지 않으며 사이트에 로그인 할 수 없습니다.

두 번째 줄은 정확한 해결책처럼 들리지는 않습니다 (저장 경로가 아닌 쿠키 경로를 처리해야하는 것으로 보이지만). 페이지가 처음으로로드되면 경로 "/"에 대한 쿠키가 표시됩니다. 페이지를 새로 고치면 해당 쿠키는 그대로 유지되며 경로는 COOKIE_PATH에 대한 쿠키가 나열됩니다. 불행히도 여전히 로그인 할 수 없습니다. 주말 내내 많은 변형을 검색해 보았지만 아무 것도 할 수 없었습니다. 내가 뭘 놓치고 있니? PHP 버전 5.3.18을 사용하고 있습니다.

+0

[session_save_path()] (http://php.net/session_save_path)는 쿠키와 아무 관련이 없습니다. stuff가 저장되는 서버 디렉토리를 설정합니다. 사실,'session_set_cookie_params()'다음에 코드의 관련성을 이해할 수 없습니다. 문제는 대부분 다음과 같습니다 : 1)'COOKIE_PATH'에 잘못된 경로가 포함되어 있습니다 (명확하게 말하지 않지만 선행 슬래시를 생략 할 것을 제안합니다) 2) 사이트 루트에 세션을 사용 중입니다 –

+0

'session_set_cookie_params' 작동해야합니다. 나는 당신이 묘사하는 것과 정확히 똑같은 일을한다. 가정을 다시 확인하십시오. 세션이 시작 되었습니까? 서버에서 세션이 생성되는 것을 보시겠습니까? 세션 쿠키를 가져 옵니까? – Halcyon

+0

부모 경로에 대해 세션 쿠키가있는 경우 브라우저에서 이상한 동작이 나타날 수 있습니다. 그들은 틀린 과자를 보낼 것이다. 쿠키를 삭제하여이 문제와 관련이 없는지 확인하십시오. – Halcyon

답변

1

나는

당신이 정말이 문제를 해결할 수있는 유일한 방법입니다 정말 확신 내 사이트에 개별 디렉토리에 대한 별도의 쿠키를 저장해야? 누군가가 당신의 가족을 인질로 잡고있는 경우에만 이것을 시도해야합니다.

사랑하는 사람의 삶에 위협이되는 경우 다른 세션에 다른 세션 이름을 사용하십시오. 결과 쿠키를 다른 경로와 연결할 수는 있지만 이는 우연의 일치입니다.

질문에 쿠키 경로와 세션 처리기 경로가 혼동 스럽습니다.

코드는 기존 세션을 바인드합니다 (어디에서 왔는지 모를 경우가 대부분입니다. 브라우저가 이미있는 경로 임). 기존 세션을 리 바인드하십시오. 이것은 실제로 당신이 의도 한 것일 수도 있지만, 여전히 매우 위험합니다. 고정의 위험을 이해하고 관리한다고 가정 할 때 다른 세션 이름을 사용하는 것이 더 나은 해결책입니다.

아마도 이라고 말하면이 필요합니다. 문제를 해결하는 방법에 대해보다 현명한 조언을 제시 할 수 있습니다.

+0

이 응용 프로그램을 사용하면 한 사람이 여러 도시에서 작업하고 있습니다 (각 도시마다 고유 한 세션 데이터 집합이 필요함). 각 탭마다 하나의 도시가 열려 있으며 근무일 전체에 걸쳐 각 도시의 세부 정보를 관리합니다. 아직도 명확하지 않은지 알려주세요. – ctrane

+0

유효한 유스 케이스를 알고 있지만 당신의 유스 케이스가 아닌 것 같습니다. request-url과 같이 도시를 요청에 다른 방식으로 추가하십시오. 또한 사용자가 실제로 어떤 도시에서 작업하고 있는지 분명하게 알 수 있습니다. – Halcyon

+0

@Frits van Campen : 각 도시마다 별도의 세션이 필요하다고 생각하는 한 가지 요구 사항은 클라이언트가 각 사용자가 각 도시에 로그인하고 로그 아웃 할 때를 추적하려고한다는 것입니다. 또한 동일한 사용자가 다른 도시에 대해 다른 권한을 가질 수 있습니다. – ctrane

0

session_save_path()은 서버에 쿠키를 저장할 위치를 정의하는 데 사용되며, 필요한 정보인지 잘 모르겠습니다.

설명서에는 path 매개 변수가 나열되어 있는데이 매개 변수는 "경로"가 실제로 스크립트에 액세스하는 데 사용 된 포트 이후의 URL 부분 인 경우 유용 할 수 있습니다.

사용자 세션을 추적하는 데 사용 되었기 때문에 PHPSESSID으로 재생되지 않으며 동일한 호스트에서 다른 세션을 갖는 경우가 아주 드뭅니다.

-1

당신이해야 할 것보다 더 어렵게 만드는 것 같습니다.사이트는 클라이언트 브라우저에서 많은 쿠키를 설정할 수 있지만 디렉토리 구조를 따르지는 않습니다.

당신이 원하는 것은 무엇인가와 같은 : 다음

setcookie('Akron',$data_about_akron,time() + (86400 * 7)); // 86400 = 1 day 
setcookie('Boston',$data_about_boston,time() + (86400 * 7)); // 86400 = 1 day 

와 함께 검색 :

$data_about_akron = $_COOKIE['Akron']; 
+0

@FritsvanCampen은 모든 사람의 대답을 하향 투표하기 전에 질문을 읽었습니다. 그는 다른 쿠키를 설정하려고 세션 바를 오용하고 있습니다. 그의 첫 번째 문장은 : "나는 내 사이트에 개별 디렉토리를위한 별도의 쿠키를 저장할 필요가있다."하지만 나는 PHPSESSID 쿠키를 망쳐 놓는 것이 좋지 않다는 것에 동의한다 ... –

+0

나는 세션이 쿠키를 사용한다고 해석한다.그는 로그인에 대해 이야기하기 때문에 쿠키가 안전하지 않으므로 세션을 원할 것입니다. 당신의 대답에도 다른 문제가 있습니다. 'setcookie'는'$ path' 매개 변수를 가지고 있습니다. 답을 게시하기 전에'$ data_about_akron'에 무엇이 있는지 명확히 해달라고 요청할 것입니다. – Halcyon

+0

@Digital Chris 각 도시의 각 사용자 로그인에 대한 세션 ID를 저장하려면 별도의 쿠키가 필요합니다. 또한 디렉토리 구조는 사용자가 특정 도시의 디렉토리에있을 때 해당 도시에 해당하는 쿠키 (예 : 세션 ID)를 사용하고자하는 경우와 관련이 있습니다 (예 : site.com/akron에있는 경우 쿠키 가져 오기 "akron"이라는 이름으로 - site.com/boston에 대한 URL을 변경하면 boston에 로그인해야합니다. 그러면 보스턴에 대한 권한을 포함하는 새로운 "boston"세션과 쿠키가 작성됩니다. – ctrane

0

나에게 내가 찾던 기능을 부여하고있다 세션 이름을 추가 (가볍게 테스트) :

session_name($cookieName); 
session_set_cookie_params($lifetimeSeconds, $cookiePath); 

이 코드에는 PHPSESSID 쿠키가 없으며 명명 된 쿠키 만 있습니다.

이 방법이 적절한 접근 방법인지 여부도 제기되었으며 그 문제는 여전히 열려 있습니다. 세션 고정에 대해 읽은 후에는 쿠키 설정 이후에 포함 된 코드에 위험이있는 것으로 들립니다. 이 코드는 실제로 다른 문제를 해결하기위한 것이 었습니다. 원래 질문에 제시된 쿠키/세션 문제에 영향을 줄 수 있다고 생각했기 때문에 포함 시켰습니다.

@Frits van Campen : 각 도시마다 개별 세션이 필요하다고 생각하는 한 가지 요구 사항은 클라이언트가 각 사용자가 각 도시에 로그인하거나 로그 아웃 할 때마다 추적하려고한다는 것입니다. 또한 동일한 사용자가 다른 도시에 대해 다른 권한을 가질 수 있습니다.

이렇게 나쁜 접근 방법 인 경우 보안, 유지 보수성 등이 나쁜 이유는 무엇입니까? 다른 옵션은 무엇입니까 (하위 도메인으로 이동할 수만 있습니다).

관련 문제