CodeIgniter는 컨트롤러 및 메소드 뒤에 URL의 각 세그먼트를 매개 변수로 간주합니다. 따라서 기본적으로 Email::email_invoice()
메소드에 7 개의 변수를 전달합니다.
당신은 하나 개의 변수로 전달하고 같은 다른 측면에서 그것을 디코딩 인코딩의 일종을 사용할 수
:
$file = base64_encode($file);
redirect('email/email_invoice/' . $file);
email.php로에서 그런
:
public function email_invoice($file) {
$file = base64_decode($file);
}
또는 get 매개 변수로 전달할 수 있습니다.
redirect('email/email_invoice/?file=' . $file);
public function email_invoice() {
$file = $this->input->get('file');
}
후자의 경우 $ _GET 배열을 활성화해야합니다.이 배열은 n ot 기본적으로.
UPDATE - 나는이 대답을 업데이트 할 것이라고 생각 의견의 일부를 바탕으로
Flashdata 사용.
$file = urlencode(base64_encode($file));
redirect('email/email_invoice/' . $file);
그리고 반대편에
: 영업으로
public function email_invoice($file) {
$file = urldecode(base64_decode($file));
}
당신을 떠나 밖으로 $ _GET 변수를 조작 할 수있는 지적 사용할 필요가 있으므로 base64_encode()
는 URL을 깰 것이다 문자가 발생할 수 있습니다 directory traversal attacks 또는 다른 취약점이 열려 있습니다. 제대로 된 경우에도 보안을위한 추가 코드가 필요합니다. 인코딩을 쉽게 발견하고 변경할 수 있습니다.
파일 경로가 URL에서 옮겨져서는 안됩니다. 덜 명백한 경우에도 POST 데이터를 조작 할 수 있습니다. 모호함을 통한 보안은 전혀 보안이 아닙니다. 더 나은 방법은 flashdata을 사용하는 것입니다. 그런 다음 컨트롤러
$this->session->set_flashdata('email_invoice_pdf', $file);
redirect('email/email_invoice/');
: 그것 뿐이다
public function email_invoice() {
$file = $this->session->flashdata('email_invoice_pdf');
}
. 세션은 다음 페이지 요청으로 파일 경로를 전달하는 데 사용되었지만 이후에는 사라졌습니다.
2.1.3+에서'$ _GET' 액세스는 기본적으로 활성화되어 있습니다. 처음에는 비활성화 된 CI의 쿼리 문자열 기반 URL입니다. –
'urlencode()'는 슬래시와 다른 URI 문자가 포함 된 URL을 통해 항목을 전달하기위한 또 다른 옵션입니다. –
urlencode를 테스트 한 결과 오류가 계속 발생하여 base64_encode로갔습니다. –