2011-12-20 3 views
1

$ _POST 데이터 배열을 가져 와서 $ _SESSION 배열에 병합하는 방법이 있습니까? 현재 데이터를 그대로 유지하고 새 데이터를 삽입하거나 변경된 부분 만 업데이트하려고합니다. 나는 array_merge를 시도했지만, 내가 찾던 것을하지 않았다.

감사

+3

상기와

$_SESSION = array_merge($_SESSION, $_POST); 

(보안 경고'array_merge'? 그것은 당신이 요구하는 것과 정확히 일치합니다. – ceejayoz

+0

만약'array_merge()'가 당신이 원하는 것을하지 않는다면, 예제를 제시해야 할 수도 있습니다. 당신의 의견은 무엇이며 예상되는 결과는 무엇입니까? 단순하게 유지하십시오. – kba

+0

$ _POST 데이터를 미리 필터링하지 않고 $ _SOSSION에 $ _POST 변수를 저장할 때 발생하는 보안 위험을 이해하시기 바랍니다. – stillstanding

답변

1

당신은 $ _SESSION [ 'postVars'] 변수를 만든 다음 거기에 $ _POST 정보를 저장하지 못했습니다. $ _SESSION을 $ _POST와 병합하지는 않겠지 만 나중에 응용 프로그램에 대한 보안 영향을 미칩니다. 나는 또한 $ _POST 글로벌에서 오는 모든 것을 절약하는 것에 조심할 것이라고 말한 바 있습니다. 어쨌든, 제 제안이 도움이되기를 바랍니다.

1

$_POST$_SESSION에 병합하는 것은 좋지 않습니다. 대신, 뭔가를 할 :

$_SESSION['lastPost']=$_POST; 

또는, 당신은 다음과 같은

$_SESSION['lastPost']['thisKeysValueChanged'] = $_POST['thisKeysValueChanged']; 
1
foreach ($_POST as $key => $val) { 
    if (!isset($_SESSION[$key]) || ($val !== $_SESSION[$key])) { 
     $_SESSION[$key] = $val; 
    } 
} 

에서, 변경 사항을 업데이트 $_SESSION['lastPost']$_POST을 비교하고 영향을받는 키 차이를 지정하고자하는 경우 즉, 현재 고려중인 POST 키 값에 SESSION arra에 해당 항목이 없거나 두 값이 다른 경우 POST 데이터를 SESSION에 복사합니다.

그러나 이렇게하면 악의적 인 사용자가 전체 세션 배열을 덮어 쓸 수 있습니다. $_SESSION['is_admin'] 플래그를 유지하고 있음을 알고 있다면, 적절한 값으로 쉽게 덮어 쓰고 수퍼 유저 권한을 부여 할 수 있습니다.

사용자가 제공 한 데이터를 세션 변수에 직접 + 맹목적으로 전송하는 것은 결코 좋은 생각입니다.

0

array_merge는 작동하지만 배열을 수정하지 않습니다. 병합 된 배열을 반환합니다. 당신이하고 싶은 것은 : :) 당신이 시도 했는가

관련 문제