세션 테이블을 뒤집어 엎는 중.

session 디렉토리 제거. 서버의 자체 session으로 관리함. 필요하다면 자동로그인을 추가함.

login_process.php를 이용하지 않고 자체적으로 세션을 관리하도록 처리 중.
This commit is contained in:
2018-02-03 04:39:22 +09:00
parent e536e2d4ca
commit ecac4b6edb
15 changed files with 96 additions and 78 deletions
+54 -11
View File
@@ -46,27 +46,37 @@ function getUserID($forceExit=false){
* @return int|null
*/
function getGeneralID($forceExit=false){
$username = getUserID();
if(!$username){ //유저명 없으면 어차피 의미 없음.
$userID = getUserID();
if(!$userID){ //유저명 없으면 어차피 의미 없음.
return null;
}
$id_key = getServPrefix().'p_no';
$generalID = util::array_get($_SESSION[$id_key], null);
$idKey = getServPrefix().'p_no';
$generalID = util::array_get($_SESSION[$idKey], null);
if($generalID){
return $generalID;
}
$db = getDB();
//흠?
$generalID = getDB()->queryFirstField('select no from general where user_id = %s', $username);
$generalID = $db->queryFirstField('select no from general where user_id = %s', $userID);
if(!$generalID && $forceExit){
header('Location:..');
die();
}
if($generalIDid){
$_SESSION[$id_key] = $generalID;
if($generalID){
//로그인으로 처리
//XXX: 'get' 함수인데 update가 들어가있다.
//TODO: 조금더 적절한 형태의 로그인 카운트를 생각해볼 것
$query=$db->query("update general set logcnt=logcnt+1 ,ip = %s_ip,lastconnect=%s_lastConnect,conmsg=%s_conmsg where user_id= %s_userID",[
'ip' => getenv("REMOTE_ADDR"),
'lastConnect' => date('Y-m-d H:i:s'),
'conmsg' => util::array_get($_SESSION['conmsg'], ''),
'userID' => $userID
]);
$_SESSION[$idKey] = $generalID;
}
return $generalID;
@@ -89,8 +99,8 @@ function getGeneralName($forceExit=false)
return null;
}
$id_key = getServPrefix().'p_name';
$generalName = util::array_get($_SESSION[$id_key], null);
$nameKey = getServPrefix().'p_name';
$generalName = util::array_get($_SESSION[$nameKey], null);
if($generalName){
return $generalName;
@@ -98,6 +108,32 @@ function getGeneralName($forceExit=false)
//흠?
$generalName = getDB()->queryFirstField('select name from general where no = %i', $generalID);
if(!$generalName){
//이게 말이 돼?
resetSessionGeneralValues();
if($forceExit){
header('Location:..');
die();
}
}
if($generalName){
$_SESSION[$nameKey] = $generalName;
}
return $generalName;
}
/**
* Session에 보관된 장수 정보를 제거함.
* _prefix_p_no, _prefix_p_name 두 값임
*/
function resetSessionGeneralValues(){
$idKey = getServPrefix().'p_no';
$nameKey = getServPrefix().'p_name';
unset($_SESSION[$idKey]);
unset($_SESSION[$nameKey]);
}
function GetImageURL($imgsvr) {
@@ -112,16 +148,23 @@ function GetImageURL($imgsvr) {
/**
* generalID를 이용해 각 서버 등록 여부를 확인함
*
* FIXME: 현재의 구현으로는 session에 p_no가 남아있지만 general 테이블에서는 삭제되어있는 진풍경(!)이 펼쳐질 수도 있음.
* 장수가 사망했을 때에 바로 테이블에서 삭제하는 것이 아니라 삭제 플래그를 설정하는 것이 나을 것임.
* (퀘 섭등 NPC가 빙의할 경우에도 마찬가지!)
*
* 세팅된 플래그는 새롭게 장수를 생성하거나, 새로 빙의할 때 초기화하는 것이 적절한 해결책일 것.
*
* @return bool
*/
function isSigned(){
$p_id = getGeneralID();
if(!$_pid){
$generalID = getGeneralID();
if(!$generalID){
return false;
}
return true;
}
function checkLimit($userlevel, $con, $conlimit) {
//TODO: 접속 제한의 기준을 새로 세울 것.
//운영자