임시방편으로 세션부분을 랜덤함수로 만든 것이 아닌 원래 php의 세션을 쓰도록 고치니 로그인이 가능하더군요.
php코드를 조금 고쳐 session id를 php가 생성한 것으로 다음과 같이 고치고
고치기전 :
$id=dechex(rand(0x10000000,0x7FFFFFFF)).dechex(rand(0x10000000,0x7FFFFFFF)).dechex(rand(0x10000000,0x7FFFFFFF)).dechex(rand(0x10000000,0x7FFFFFFF));
$result=mysql_query("INSERT INTO {$database['prefix']}Sessions(id, address, userid, created, updated) VALUES('$id', '{$_SERVER['REMOTE_ADDR']}', $userid, UNIX_TIMESTAMP(), UNIX_TIMESTAMP())");
if($result&&(mysql_affected_rows()==1)){
@session_id($id);
header("Set-Cookie: TSSESSION=$id; path=/; domain={$service['domain']}");
return true;
}
고친후 :
$result=mysql_query("update {$database['prefix']}Sessions address='{$_SERVER['REMOTE_ADDR']}', userid='$userid', created=UNIX_TIMESTAMP(), updated=UNIX_TIMESTAMP() where id='".session_id()."'");
if($result&&(mysql_affected_rows()==1)){
return true;
}
-----------------------
그후에 다음 몇줄을
------------------
session_set_save_handler('openSession','closeSession','readSession','writeSession','destroySession','gcSession');
session_cache_expire(1);
session_set_cookie_params(0,'/',$service['domain']);
if(session_start()!==true){
header('HTTP/1.1 503 Service Unavailable');
}
------------------
setSession 의 isSessioinAuthorized 체크 이후에 넣었더니 로그인이 되네요.
**** 문제가 있는 부분으로 추정되는 곳---------
$id=dechex(rand(0x10000000,0x7FFFFFFF)).dechex(rand(0x10000000,0x7FFFFFFF)).dechex(rand(0x10000000,0x7FFFFFFF)).dechex(rand(0x10000000,0x7FFFFFFF));
...
@session_id($id);
header("Set-Cookie: TSSESSION=$id; path=/; domain={$service['domain']}");
----------------
위 부분이 문제인것 같습니다. 세션아이디를 마음대로 바꾸는것이 좀 찜찜했는데...
태터툴즈 개발자분들의 실험 및 수정 부탁드리네요... 아마 php 버전이 높아지면서 안되는것 같은데 이전 버전 php에서는 실험해 보지 못했습니다.
위의 코드는 전혀 에러체크를 하지 않았기때문에 세션아이디가 디비에 저장안되었을경우 에러날거에요.
어디까지나 임시코드니 실험후 수정부탁드립니다.
bgilyuh (2007-02-07 19:39:59)에 의해 마지막으로 수정