GET 방식으로 넘어온 값을 쿠키 설정하는 법?

GET 방식으로 넘어온 값을 쿠키 설정하는 법?

QA

GET 방식으로 넘어온 값을 쿠키 설정하는 법?

본문

A게시판에서 GET 방식으로 아래처럼 값을 넘긴 경우

(예) ?hz=2

 

// extend/user.config.php 파일에서 넘겨받은 값으로 쿠키 생성 후

set_cookie('hz', $_GET['hz'], ....);

 

// 쿠키 사용

echo get_cookie('hz');

 

이렇게 하면,

A게시판에서 ?hz=2 부분 없어도 쿠키 삭제 전까지는 get_cookie('hz') 값이 계속 2 찍혀야 하는 거 아닌가요? 라라곤에서 테스트해보니, 안 그러더라구요.

 

set_cookie, get_cookie 함수

https://github.com/gnuboard/gnuboard5/blob/26b22ac9caa857d11488c5c8a90a0ce4b8fe27c9/lib/common.lib.php#L146

 

 

 

 

이 질문에 댓글 쓰기 :

답변 3

set_cookie를 하는 페이지와
get_cookie를 하는 페이지를 분리하셔서

 

set_cookie이후

 

header("Location: get_cookie.php파일");

로 이동해서 get_cookie를 해보세요

실은 아래 게시글 마르스컴퍼니 님 팁을 보고
https://sir.kr/qa/472641

해당 스킨이 계속 유지되도록 하는 연습 중인데,
쿠키 설정하고 받을 곳이 같은 파일들이라....

/extend/user.config.php 파일에 아래처럼 넣어봤는데, 원하는 결과가 나오질 않네요. ㅎ

set_cookie('list_type', $_GET['list_type'], 86400);
if($_GET['list_type']) header("Location: http://127.0.0.1/gnu55/free");

if ($bo_table == 'free' && get_cookie('list_type') == '2') {
$board['bo_skin'] = 'gallery';
$board['bo_mobile_skin'] = 'gallery';
if (G5_IS_MOBILE) {
$board_skin_path    = get_skin_path('board', $board['bo_mobile_skin']);
$board_skin_url    = get_skin_url('board', $board['bo_mobile_skin']);
  } else {
  $board_skin_path    = get_skin_path('board', $board['bo_skin']);
$board_skin_url    = get_skin_url('board', $board['bo_skin']);   
  }       
}


PS.
if($_GET['list_type']) 조건 없이 헤더함수 넣으면 리디렉션 횟수가 너무 많다는 에러 뜨네요.

음.. 로직의 조건이 좀 이상해보이는건 제가 잘 인해를 못해서일까요?

set_cookie 를 할때 판단할 list_type 은 처음에 어떤값을 가지고 있나요?

user.config.php파일이면.. common.php에서 불러들이는 파일이라서.
/gnu55/free 에 해당되는 파일을 판단/분리작업이 먼저 수행되는게 맞느지 체크를 해보셔야할것같구요
시점이 다를수있어서요

그래서 설정된 bo_table 이라 list_type 의 값을 적절히 셋팅한후에 판단해야하는 사항인거 같은데

위 내용을 user.config.php파일이 아닌
실제로 리디렉션할 경로의 index.php 혹은 (게시판이라면 skin.의 head영역에 넣어서
판단하는게 더 안정적일것 같습니다.

감사합니다. ^^
사실 궁금한 게 좀 있긴 했는데, 너무 귀찮게 하는 게 아닌가 싶어서 참았어요.
염치불구하고 궁금한 거 적어봅니다. ㅎ

아래처럼 하니까 얼추 스킨은 유지되더라구요.


if ($_GET['list_type']) {
    set_cookie('list_type', $_GET['list_type'], 86400);
}
$list_type = get_cookie('list_type');

if ($bo_table == 'free' && $list_type == '2') {
$board['bo_skin'] = 'gallery';
$board['bo_mobile_skin'] = 'gallery';
if (G5_IS_MOBILE) {
$board_skin_path    = get_skin_path('board', $board['bo_mobile_skin']);
$board_skin_url    = get_skin_url('board', $board['bo_mobile_skin']);
  } else {
  $board_skin_path    = get_skin_path('board', $board['bo_skin']);
$board_skin_url    = get_skin_url('board', $board['bo_skin']);   
  }       
}


다만, 수동으로 새로고침하거나 다른 곳으로 간 이후부터 적용이 되더라구요.
그래서, 앞서 말씀주신 것처럼 header란 것으로 새로고침을 해줘야 할 것 같아서.
구글링 해서 아래 2가지 경우를 set_cookie 바로 밑에 넣어봤는데, 에러 발생하네요.


PS. 테스트해 본 header 1 - (http://127.0.0.1/gnu55/%7B$url%7D 처럼 엉뚱한 곳이 뜨네요. $url 값을 echo로 찍으면 정상적으로 찍히는데... )


$http_host = $_SERVER['HTTP_HOST'];
$request_uri = $_SERVER['REQUEST_URI'];
$url = 'http://' . $http_host . $request_uri;
header('location: {$url}');


PS2. 테스트 해 본 HEADER 2 - 무한 리프레시 에러.

header("Refresh:0");


주소?list_type=2 접속시부터 바로 쿠키가 적용되게 하려면 어떻게 해줘야 할까요?
(가급적 extend 폴더 안 파일에서 모든 걸 처리하고 싶습니다. )
세션은 바로 적용되던데, 쿠키는 이런 문제가 있네요. ㅡㅡ;


저는 이렇게 테스트해봤어요


<?php
include_once("../common.php");

$list_type = isset($_GET['list_type'])?$_GET['list_type']:"";
$_this = $_SERVER['PHP_SELF'];
echo 'thispage : '.$_this."<BR>";
if ($list_type) {
    set_cookie('list_type', $list_type, 3600); // 쿠키셋팅
    header("Location: $_this");
}
else {
  $get_type =  get_cookie("list_type");
}
echo 'get_type = '.$get_type."<BR>";

적어주신 코드를 (/extend/user.config.php 파일과 /bbs/board.php 상단)에 각각 넣어 테스트 해봤는데, 현재페이지에서 새로고침이 잘 이루어지진 않네요. (※ 짧은주소 적용상태입니다.)

http://127.0.0.1/gnu55/free?list_type=2 이동 전 표시
thispage : /gnu55/bbs/board.php
get_type =

http://127.0.0.1/gnu55/free?list_type=2 이동 후 결과
[존재하지 않는 게시판입니다.] 경고창 뜬 후, 확인 버튼 누르면 메인으로 이동합니다.
다시 free 게시판으로 와보면 갤러리형 스킨으로 잘 바뀌어 유지되긴 합니다.

링크 주소가 잘못된 것일까요?

짧은 주소일때 값들이 정상적으로 보이는지 먼저 확인후에
리디렉션을 하시는게 낫겠네요

무조건 header로 보내지말고.. 하나하나 찍어보면서 확인후에 보내시죠

조언 덕분에 잘 해결했습니다.
$get_type =  get_cookie("list_type");
$get_type = $get_type ? $get_type : $_GET['list_type'];

감사합니다. 추석 연휴 잘 보내세요 ~~~
(  ^ ________ ~ ) ===b

쿠키는 set 직후 바로 get 하는게 아니라 페이지 이동이나 갱신된 이후 get 할수 있습니다.

https://www.php.net/manual/en/function.setcookie

Once the cookies have been set, they can be accessed on the next page load with the $_COOKIE array. Cookie values may also exist in $_REQUEST.

 

문제는 해당 게시판 분류탭들을 클릭하면 get_cookie 값이 유지가 안 됩니다.
쿠키 삭제 전까지는 쿠키값이 해당 게시판에서 먹혀야 하는데, 그게 안 돼요.

set_cookie('hz', $_GET['hz']); get 뒤에 있던 부분을 지우고 해보세요.

지우면 매개변수가 적다는 이런 에러가 뜹니다.

Fatal error: Uncaught ArgumentCountError: Too few arguments to function set_cookie(), 2 passed in C:\laragon\www\gnu55\extend\user.config.php on line 3 and exactly 3 expected in C:\laragon\www\gnu55\lib\common.lib.php:147 Stack trace: #0 C:\laragon\www\gnu55\extend\user.config.php(3): set_cookie('my', NULL) #1 C:\laragon\www\gnu55\common.php(814): include_once('C:\\laragon\\www\\...') #2 C:\laragon\www\gnu55\_common.php(2): include_once('C:\\laragon\\www\\...') #3 C:\laragon\www\gnu55\index.php(2): include_once('C:\\laragon\\www\\...') #4 {main} thrown in C:\laragon\www\gnu55\lib\common.lib.php on line 147

답변을 작성하시기 전에 로그인 해주세요.
전체 99
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT