개발2021. 5. 16. 10:34
300x250

 

## 출처
https://sir.kr/qa/57777

편리 님의 답변

common.js 파일과 common.lib.php 파일의 get_cookie 함수의 코드를 비교해보시면 아시겠지만
common.js 파일에서는 쿠키의 이름을 입력받은 그대로 저장하는 반면
common.lib.php 파일의 get_cookie 함수는 md5를 이용해 이름을 암호화합니다.
 
따라서, 자바스크립트에서 get_cookie를 이용해 쿠키를 생성했다면 php 의 get_cookie 함수 대신 $_COOKIE 를 사용해야 합니다. get_cookie("topsubmenu​") 를 $_COOKIE['topsubmenu​'] 로 수정해야합니다.


## 그누보드의 관련 소스들

- common.lib.php


// 쿠키변수 생성
function set_cookie($cookie_name, $value, $expire)
{
    global $g5;

    setcookie(md5($cookie_name), base64_encode($value), G5_SERVER_TIME + $expire, '/', G5_COOKIE_DOMAIN);
}


// 쿠키변수값 얻음
function get_cookie($cookie_name)
{
    $cookie = md5($cookie_name);
    if (array_key_exists($cookie, $_COOKIE))
        return base64_decode($_COOKIE[$cookie]);
    else
        return "";
}



- common.js


// 쿠키 입력
function set_cookie(name, value, expirehours, domain)
{
    var today = new Date();
    today.setTime(today.getTime() + (60*60*1000*expirehours));
    document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + today.toGMTString() + ";";
    if (domain) {
        document.cookie += "domain=" + domain + ";";
    }
}

// 쿠키 얻음
function get_cookie(name)
{
	var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
	if (match) return unescape(match[2]);
	return "";
}



## 결론

PHP 에서 쿠키를 저장 할때, 쿠키명은 md5 로 쿠키값은 base64_encode 로 변환해서 저장한다.
그래서 javascript 에서 사용하려면 같은 조작을 해야만 불러올 수 있다.
물론 불가능 한 것은 아니지만, 불편한 것은 사실이다.
https://parkwonhui.github.io/front/2019/04/11/front-js-md5-base64.html


## 해결

자바스크립트에서만 사용하는 쿠키는 그냥 구워서 써도 상관은 없다.
하지만, PHP 에서도 사용해야 하거나 PHP 의 쿠키를 가져와서 사용하려면, Ajax 를 사용하는 방법이 있다.



300x250
Posted by 마스타