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 함수
답변 3개
set_cookie를 하는 페이지와 get_cookie를 하는 페이지를 분리하셔서
set_cookie이후
header("Location: get_cookie.php파일");
로 이동해서 get_cookie를 해보세요
답변에 대한 댓글 12개
리디렉션인지 아닌지는 파리마터 하나로 판단하게 해주면될것같구요
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>";
■ 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 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개
쿠키 삭제 전까지는 쿠키값이 해당 게시판에서 먹혀야 하는데, 그게 안 돼요.
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 1개
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
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
https://sir.kr/qa/472641
해당 스킨이 계속 유지되도록 하는 연습 중인데,
쿠키 설정하고 받을 곳이 같은 파일들이라....