2013-08-22 3 views
1

이것은 API에서 보낸 $ POST 데이터를 반복하고 이에 상응하는 $ SESSION 이름/값 쌍을 작성하는 올바른 방법일까요?

foreach($_POST as $key=>$value) 
{ $_SESSION['$key']=$value; } 

UPDATE : 고체 응답 첫째, 감사 - 나는 내가이 기능을 고려하는 이유 극복하기 위해 노력하고있어 문제를 설명 할 필요가 있다고 생각합니다. $ _POST 응답은 지불 프로세서 게이트웨이에서 발생합니다. 지불 양식/처리가 Google 도메인에 있지 않기 때문에 지불 결과 (승인/거절 등)가 $ POST를 통해 Google 서버에 연결되는 것이 문제입니다 - 우리의 PHP 코드가 응답 데이터를 처리하려고 할 때, 우리의 것과 오류 대신에 도메인 아래에 다양한 PHP 구조 (예 : 'file.php'를 포함)를 찾습니다. $ POST 데이터를 세션으로 이동 한 다음 파일/디렉토리/리소스 트리가 올바르도록 사람을 우리 도메인으로 다시 이동하십시오. 무엇이 마주 치는 것을 이해합니까? 나는 약 Strings in PHP을 읽어 보시기 바랍니다 것

foreach ($_POST as $key => $value) { 
    $_SESSION[$key] = $value; 
} 

:

+3

'$ key' 주위에서 작은 따옴표를 제거해야합니다. –

+0

@MarcB Thanks Marc하지만 우리가 필요로하는 것은 아니기 때문에 세션 변수를 저장해야합니다. Jasons에 대한 내 의견은 보안상의 이유로 – DMSJax

답변

5

는 작은 따옴표를 사용하지 마십시오.

참고 : 참고 : 대부분의 경우 키 충돌을 통한 주입으로 인해 안전하지 않을 수 있습니다. 이 로그인 한 사용자 ID을 게시했는지 고려하십시오. 오히려 분리를 유지하고 싶지 않아

$_SESSION['posted_data'] = $_POST; 
+3

+1입니다. 외부 소스의 데이터를 항상 위생/재확인해야합니다. – Technoh

1

:

이는 캡슐화를 통해 완화 될 수 있을까?

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

이 내용은 이미에없는 키가 POST를 바르에 나타납니다 :

$_SESSION['response'] = $_POST; 
0

이 당신이 그것을 사용하는 방법에 따라 발생할 수있는 보안 문제를 무시, 당신이 할 수있는 것은 사용하는 것입니다 $ _SESSION. POST vars가 당연히 우선하기를 원한다면 주위를 바꾸십시오.

보안에 관한 간단한 설명으로, 많은 사용자가 세션을 사용하여 사용자 ID를 저장 한 경우 userid=1으로 스크립트에 POST 요청을 보내면 어떻게됩니까?

모든 것이 말하는 것은, 당신이 이것으로 무엇을하고 있는지 조심하십시오. 가능하면 제안 된대로 수행하고 $_SESSION['post_vars'] = $_POST과 같은 게시물 바를위한 $ _SESSION의 고유 키를 사용하는 것이 좋습니다 (양식 데이터를 유지하는 데 사용하는 경우 ['form_data'], 일반적으로 사람들이이 작업을 수행합니다). $_SESSION 이미 항목을 덮어 범위의 많은 - 당신이 상태로 당신이 정말로을 수행 할 경우

1

, 당신은 "나쁜 일"작동하지만 것

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

같은 것을 사용할 수 있습니다 변수 :

의 index.php :

<form action="2.php" method="post"> 
<input type="text" name="hidden" value="hidden"> 
<button type="submit">Click</button> 
</form> 

2.PHP :

$_SESSION = $_POST + $_SESSION; 
: 더 나은

<?php 
session_start(); 
session_unset(); 
$_SESSION['hidden']="existing"; 
$_SESSION=array_merge($_SESSION,$_POST); 

echo '<pre>'.print_r($_SESSION,true).'</pre>'; 

당신은 또한 array union operator를 사용할 수

0

하지만, 분명히

$_SESSION['POST']=$_POST; 

를 사용하여이 작업을 수행하기 전에 당신이 필요로하는 모든 데이터 검사를 수행하는 것

이 값은 $_POST이고 그 값은 0123입니다키가 이미 $_POST에 없습니다.

0

POST가 지불 게이트웨이에 의해 만들어지기 때문에 세션은이 게이트웨이와 연결됩니다. 세션 쿠키를 읽는 데 신경 쓸 일이 없기 때문에 첫 번째 요청에서 손실 될 가능성이 큽니다.

클라이언트는 세션 중에이 데이터를 보지 않습니다.

이 데이터를 사용하려면 지불 게이트웨이가 악용 가능한 클라이언트 정보를 제공하면 어떻게 든 유지해야합니다. 가능한 솔루션은 데이터베이스, 키/값 저장소입니다.

또는 지불 게이트웨이를 사용하면 구매 후 클라이언트 브라우저를 리디렉션하는 링크를 지정할 수 있습니다. POST에서 매개 변수를 가져 오는 경우 리디렉션 URL에 추가하여 GET 매개 변수로 다시 웹 사이트로 전달할 수 있습니다.

+0

나는 이것들을 authorize.net 에뮬레이터를 사용하고 있기 때문에 이것을 고려했다. 그러나 유효한 "authorize.net"API 필드가 무시됨에 따라 "에뮬레이션"이 완전히 정확하지 않은 것으로 보인다. 링크 옵션 포함. 그래도 고마워 – DMSJax

관련 문제