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

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

QA

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

답변 3

본문

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를 해보세요

/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 게시판으로 와보면 갤러리형 스킨으로 잘 바뀌어 유지되긴 합니다.

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

쿠키는 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.

 

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

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 21
© SIRSOFT
현재 페이지 제일 처음으로