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

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

sinbi 3년 전 조회 2,447

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개

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

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

 

set_cookie이후

 

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

로 이동해서 get_cookie를 해보세요

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

답변에 대한 댓글 12개

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

해당 스킨이 계속 유지되도록 하는 연습 중인데,
쿠키 설정하고 받을 곳이 같은 파일들이라....
플래토
3년 전
같은파일이라도 리디렉션을 같은파일로 하면되죠
리디렉션인지 아닌지는 파리마터 하나로 판단하게 해주면될것같구요
s
sinbi
3년 전
/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']) 조건 없이 헤더함수 넣으면 리디렉션 횟수가 너무 많다는 에러 뜨네요.
플래토
3년 전
음.. 로직의 조건이 좀 이상해보이는건 제가 잘 인해를 못해서일까요?

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

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

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

위 내용을 user.config.php파일이 아닌
실제로 리디렉션할 경로의 index.php 혹은 (게시판이라면 skin.의 head영역에 넣어서
판단하는게 더 안정적일것 같습니다.
s
sinbi
3년 전
자세한 조언 감사합니다.
좀 더 공부해 궁금한 거 다시 질문글 올리겠습니다.
지금은 제가 공부가 덜 되서 체계가 안 잡혀있네요.
플래토
3년 전
@sinbi

안해본것을 시도하는건 어렵고 막연한 일이 될수있어요
시행착오를 겪으면서 배워가는거죠.
도움이 필요하시면 쪽지주세요
s
sinbi
3년 전
감사합니다. ^^
사실 궁금한 게 좀 있긴 했는데, 너무 귀찮게 하는 게 아닌가 싶어서 참았어요.
염치불구하고 궁금한 거 적어봅니다. ㅎ

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


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 폴더 안 파일에서 모든 걸 처리하고 싶습니다. )
세션은 바로 적용되던데, 쿠키는 이런 문제가 있네요. ㅡㅡ;
플래토
3년 전
@sinbi
저는 이렇게 테스트해봤어요


<?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>";
s
sinbi
3년 전
@플래토 적어주신 코드를 (/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 게시판으로 와보면 갤러리형 스킨으로 잘 바뀌어 유지되긴 합니다.

링크 주소가 잘못된 것일까요?
플래토
3년 전
짧은 주소일때 값들이 정상적으로 보이는지 먼저 확인후에
리디렉션을 하시는게 낫겠네요

무조건 header로 보내지말고.. 하나하나 찍어보면서 확인후에 보내시죠
s
sinbi
3년 전
조언 덕분에 잘 해결했습니다.
$get_type = get_cookie("list_type");
$get_type = $get_type ? $get_type : $_GET['list_type'];

감사합니다. 추석 연휴 잘 보내세요 ~~~
( ^ ________ ~ ) ===b
플래토
3년 전
@sinbi 잘하결하셨다니 다행이네요
즐거운 한가위되세요

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

3년 전

쿠키는 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 https://www.php.net/manual/en/reserved.variables.cookies.php">$_COOKIE array. Cookie values may also exist in https://www.php.net/manual/en/reserved.variables.request.php">$_REQUEST.

 

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

답변에 대한 댓글 1개

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

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

3년 전

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

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

답변에 대한 댓글 1개

s
sinbi
3년 전
지우면 매개변수가 적다는 이런 에러가 뜹니다.

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

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

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

로그인