테스트 사이트 - 개발 중인 베타 버전입니다

주문완료페이지 url직접입력(od_id, uid 포함)으로 접속할 때 접근 막기 채택완료

coDribble 6년 전 조회 4,343

주문완료시 orderformupdate.php 에서 orderinquiryview.php?od_id=주문번호&uid=세션값 페이지로 이동 시켜주는 경로를 수정해주고

 

</p>

<p>// goto_url(G5_SHOP_URL.'/orderinquiryview.php?od_id='.$od_id.'&uid='.$uid);

goto_url(G5_SHOP_URL.'/ordercomplete.php?od_id='.$od_id.'&uid='.$uid);</p>

<p>

 

주문 완료되면 상세내역으로 바로 넘어가는게 아니라 ordercomplete 로 넘어가게 만들었습니다...

 

그런데 직접 url에 주문번호, 세션값 넣고 이동시 접속이 되는데 이걸 막기 위해서는 어떻게 처리를 해야할까요...??ㅠㅠㅠㅠㅠ

 

orderinquiryview 페이지에 있는 걸 일단 가져와보긴 했는데...

</p>

<p>include_once('./_common.php');</p>

<p> </p>

<p>// 불법접속을 할 수 없도록 세션에 아무값이나 저장하여 hidden 으로 넘겨서 다음 페이지에서 비교함

$token = md5(uniqid(rand(), true));

set_session("ss_token", $token);</p>

<p> </p>

<p>if (!$is_member) {

    if (get_session('ss_orderview_uid') != $_GET['uid'])

        alert("직접 링크로는 접속이 불가합니다.", G5_SHOP_URL);

}</p>

<p> </p>

<p>$sql = "select * from {$g5['g5_shop_order_table']} where od_id = '$od_id' ";

if($is_member && !$is_admin)

    $sql .= " and mb_id = '{$member['mb_id']}' ";

$od = sql_fetch($sql);

if (!$od['od_id'] || (!$is_member && md5($od['od_id'].$od['od_time'].$od['od_ip']) != get_session('ss_orderview_uid'))) {

    alert("조회하실 주문서가 없습니다.", G5_SHOP_URL);

}</p>

<p> </p>

<p>$g5['title'] = '주문완료';</p>

<p>

 

이런식으로 가져왔는데... 제가 구현하고싶은건

 

무조건 주문서작성에서 넘어와야지만 페이지접속이 접속이 가능하고

 

직접 url에 주문번호랑 uid 값을 넣어도 접속이 불가능하게... 하고싶습니다..ㅠㅠㅠ

 

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
플래토
6년 전

token 자체가 구분자인데 

또다른 구분자를 두고 싶으신경우

 

주문서 페이지에서 order id 와 연결 토큰값(임의의 값)을 생성해서 

넘기는 시점에 DB에 저장을 하시고  (이때 db는 임의의 테이블을 새로 생성해야할겁니다.)

 

페이지에서는 그 저장된 정보를 order_id기준으로 불러서 토큰(저장된 임의의값)이 일치할때만

진행되고 아니면 이전페이지나 초기페이지로 넘겨버리면 될겁니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

c
coDribble
6년 전
앗... 빠르시네요...;; ㅎㅎ 답변감사드립니다!!

안그래도 폼없이 data(토큰값)를 post 받을 수 있는 방법에 대해 찾아보고 있었는데...

https://stackoverflow.com/questions/3780912/sending-post-data-without-form

이 글도 보면 세션을 이용하라는데... 말씀해주신 것과 위 글을 본 것을 토대로...

유추해본거는... ordercomplete 페이지의 $token, set_session 부분을 orderformupdate 페이지 goto_url 윗부분에 옮기고

ordercomplete 에서 세션값을 가져와서 대조해보는 방법일 것 같은데...

orderformupdate 페이지에 넣어놓은 세션값을 ordercomplete 에서 어떻게 가져와야 하나요..??ㅠㅠㅠ
c
coDribble
6년 전
해결했습니다...;;;

불필요한거 같아서 $token, set_session 부분은 지우고

[code]
// if (!$is_member) {
if (get_session('ss_orderview_uid') != $_GET['uid'])
alert("직접 링크로는 접속하실 수 없습니다.", G5_SHOP_URL);
// }
[/code]

회원이 아닌경우에만 직접입력 접속을 막고있던 부분인 것 같아서...

회원 비회원 상관없이 무조건 막아야하는게 목적이라

!$is_member 부분을 지워본거였는데 됩니다!!

테스트로 주문도 해봤는데 주문서작성 후 페이지 이동은 되고 직접 링크 접속은 막히고

원하던 대로 된 것 같습니다!!

덕분에 어떻게 해야할지 방향을 잡을 수 있었던거 같아요;;

감사드립니다!!
플래토
6년 전
@coDribble 그래도 빠르게 해결하셨다니 다행이네요
답글적고 다른일보다가 지금확인했네요
수고하세요

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인