관리자만 '토큰 정보가 올바르지 않습니다.' 라는 오류 메시지ㅠ
관련링크
본문
안녕하세요
갑자기 잘 되던 것이 무언가 잘못 수정되어 그런것인지~ ? 모르겠지만 아래와 같은 오류가 발생합니다.ㅠ
* 오류 상황
- 일반 사용자들은 게시판 등록이 잘 되는 상황
- 관리자 ID 만 아래 오류가 발생됩니다.
* 확인한 내용
- 관리자 페이지에서 조차 토큰 값이 확인이 안됨, 오류 1은 정확히 어디서 발생하는 메시지도 확인 불가
- 관리자 ID 로 처리하면, 토큰값이 안들어 오는 상황 $_REQUEST 값이 없음(그림 2 참조)
- 일반 게시판에 일반 회원과 관리자 의 CSS/JS 가 다른 상황으로 판단됨
(무엇이 다른지~? 정확히 모르겠음)
우선, 정확히 무엇이 잘못되었는지? 모르겠어서 어디를 확인해야할지도 모르겠습니다.
혹시 경험해 보신 분들 계시면 고견 한번 부탁드립니다.
미리 감사합니다.
[오류 1 - 관리자 페이지 및 일반 게시물 처리 시에도 발생됨]

[오류 2 - 일반 게시판에 글쓰기 및 댓글 달기 할 때 발생]

답변 4
뭔가 스크립트의 오류로 토큰오류가 발생되는듯 하니 크롬브라우저에서 F12 개발자모드로 확인해 보셔야 할듯 합니다.
토큰 정보가 올바르지 않다는것은 세션값이 서로 달라서 그런겁니다.
입력시 생성되는 토큰과 처리 토큰값이 일치해야지만 이후 처리가 가능한부분입니다.
이는 보완적인 이슈때문에 서로간 일치 되었을떄만 처리 하도록 설계 된부분이오니.
이부분만 확인해서 처리하시면 쉽게 처리가 가능합니다.
캐시 또는 세션 쿠키 도메인 불일치입니다.
즉, 토큰 히든필드가 빠졌거나, 제거, 미전송 상태입니다.
없으면 “올바른 방법으로 이용해 주십시오.”,
불일치면 “토큰 정보가 올바르지 않습니다.” ~~
'캐시 무력화', '쿠키 도메인 통일'로 해결됩니다.
그리고 가능하면 사용 도메인은 일원화하시길~
※ 방안 ; (nginx 기준)
//= 폼 처리 경로 캐시 막기 (글쓰기/댓글/로그인/관리 등 토큰 쓰는 경로)
location ~ ^/(login|logout|register|signin|member(_confirm|_leave)?|password(_.*)?|bbs/(write|comment)_|bbs/board\.php|gate/) {
add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0" always;
add_header Pragma "no-cache" always;
expires off;
}
//= PHP 처리 블록에도 ~
location ~ \.php$ {
add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0" always;
add_header Pragma "no-cache" always;
expires off;
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/php-XXXX.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# HTTPS만 사용한다면
fastcgi_param PHP_VALUE "session.cookie_domain=.fi-lab.com\nsession.cookie_secure=1\nsession.cookie_httponly=1\nsession.use_strict_mode=1";
}
//※※※ ; """/run/php-fpm/php-XXXX.sock""", 이는 해당 서버의 "소켓경로"입니다. ※※※
※설정 확인은 ~~
개도구(F12), Network > 'Doc' 열고
관리자 계정으로 글을 쓰며, 고침(F5)해보세요 > write.php. . . 나타남.
write.php. . . 이 Name을 클릭하여, 아래와 같은 설정한 내역이 나타나면 >>> Ok
headers 목록에 아래 내역이 포함된다네요~~ 옛기억으로 열심히 찾아봄 ~~
Cache-Control: no-store, no-cache, must-revalidate
Set-Cookie: PHPSESSID=…; domain=.glitter.kr; secure; HttpOnly
아주 간단하게는
define('G5_DOMAIN', '');
define('G5_HTTPS_DOMAIN', '');
여기에 도메인을 넣으시면 됩니다.
그래도 안되면 세션이나 쿠키 또는 SSL 문제입니다.