[참고]댓글이 다른 포스트에 달리는 현상 관련

· 댓글 : 7 조회 : 2209 · 5


정말 오랜간만의 포스트네요.. 


얼마전에 댓글이 엄한 포스트에 달리는 경험을 하였습니다. 순간 귀신에 홀린 듯한

느낌이 들었지만 qna 살펴보니 저만 그런 게 아니었더군요. 


http://www.kimsq.co.kr/r/qna/13998


댓글이 없어서 이래저래 살펴본 결과 문제는 $cync값과 관련이 있다는 것을

확인하고 아래 정리하였으니 필요하신 분은 참고 바랍니다!


======================================================


1. 증상

- 킴스큐 포스트들을 각각 개별 창에 연 뒤 각각 포스트에 댓글을 달아도 마지막으로 연 특정 포스트에 모두 댓글이 달림



2. 원인

- 댓글 작성 시 실행되는 액션(comment의 a.write.php)의 소스코드를 보면 


$cync= trim($_SESSION[$m.'cync']);


이 있는데 댓글이 어디에 속하는지에 대한 정보를 담고 있는 싱크 정보가 세션에 담겨져 있었다. 

그럼 이 세션은 어디에서 저장이 되나 봤는데 comment/main.php에서 저장이 되고 값은 $cync과

동일하다. 즉, 포스트가 로딩될 때마다 해당 포스트에 대한 cync값이 세션이 저장되어 있기 때문에

무조건 마지막에 호출된 포스트에 대한 cync값이 저장되게 되어 있다. 


고로 무조건 마지막으로 호출된 포스트에 모두 댓글이 달리는 것은 당연. 



3. 해결

- 결론적으로 세션을 사용하지 않고 댓글 작성 form의 파라미터로 cync값을 개별적으로 저장하여

액션에 넘김


* 소스 수정부분

1) comment/main.php


if($cync)

{

$_SESSION[$m.'cync'] = $cync;

}

if (!$_SESSION[$m.'cync'])

{

getLink($g['s'].'/','','동기화코드가 지정되지 않았습니다.','');

}

$cyncArr= getArrayString($_SESSION[$m.'cync']);


부분을 주석처리하고 대신 아래 코드로 교체


$cyncArr= $cync;

$cyncArr= getArrayString($cync);

(2015.04.17 업데이트: 제가 "getArrayString()" 함수를 적용해야 하는 것을 누락했네요..ㅠ.ㅠ 이 함수 반드시 있어야 합니다!)


2) 댓글 스킨/_write.php


댓글 작성 form의 파라미터로 cync 값 추가



3) 댓글 작성 액션 - a.write.php


- 아래 부분 주석 처리

//$cync = trim($_SESSION[$m.'cync']);


- 맨 하단의 getLink에서 "cync" 파라미터 추가

getLink(getLinkFilter($g['s'].'/?'.($_HS['usescode']?'r='.$r.'&':'').($c?'c='.$c:'m='.$m),array('skin','iframe','sort','orderby','recnum','where','keyword','cync')),'parent.','','');




** 기타 사항
- 개인적으로 withbebe_comment 댓글 스킨을 사용중인데 여기서는 추가적으로 _write.php에 아래와 같이 수정 (수정 시에만 제목, 본문 내용 등 필요한 내용 출력되게 함)

<?php if($type == 'modify') echo $R['uid']?>" />
...
?php if($type == 'modify') echo htmlspecialchars($R['name'])?>" class="input1" /> (이름)
<?php if($type == 'modify') echo $pw?>" class="input1" /> (패스워드)
...

<?php if($type == 'modify') {echo htmlspecialchars($R['subject']); }?>" class="input2" /> (제목)

...


<?php if($type == 'modify') echo htmlspecialchars($R['content'])?>


==============================================================================================


<2016.06.07 업데이트>


댓글에 슈퍼손님이 알려주신 댓글란 출력 문제를 방금 봤는데 임시방편으로나마 아래와 같이 해보시기 바랍니다. 


아래 두 개의 파일을 열면



/modules/comment/lang.korean/action/a.oneline_write.php

/modules/comment/lang.korean/action/a.oneline_delete.php

맨 하단에 각각
getLink(getLinkFilter($g['s'].'/?'.($_HS['usescode']?'r='.$r.'&amp;':'').($c?'c='.$c:'m='.$m),array('skin','iframe','sort','orderby','recnum','where','keyword')).'&uid='.$parent.'&oneOpen=Y','parent.','','');

getLink(getLinkFilter($g['s'].'/?'.($_HS['usescode']?'r='.$r.'&amp;':'').($c?'c='.$c:'m='.$m),array('skin','iframe','sort','orderby','recnum','where','keyword')).'&uid='.$R['parent'].'&oneOpen=Y','parent.','','');

이라고 되어 있는데 이 부분을 주석처리 하고 아래 코드로 바꿔줍니다. 

getLink('reload','parent.','','');


위와 같이 수정하면 일단 작성 및 삭제 후 댓글란이 refresh 되면서 정상적으로 출력이 됩니다. 

급하게 되는 점만 확인했기 때문에 어떤 부작용(?)이 있을 지 조심스럽네요. 어쩌면 다른 댓글
스킨을 쓰면 되던게 안 될수도 있지 않을까 싶은데 혹시 스킨 변경 후 안 되면 원래 코드로
변경해서 해보세요~
통계분석을 위해 매체별 전용URL 사용해주세요.
밍대디님의 포스트
최근 리스트
리스트가 없습니다.