728x90

Android 에서 로그인을 하면 서버에서 PHP가 받아서 처리하는 로그인 예제이다.

결과를 json 으로 받아서 Android에서 저장해서 처리한다.


<?php
// 파일을 직접 실행하는 비정상적 동작을 방지 하기 위한 목적
if(isset($_POST) && $_SERVER['REQUEST_METHOD'] == "POST"){
    @extract($_POST); // $_POST['loginID'] 라고 쓰지 않고, $loginID 라고 써도 인식되게 함
    if(isset($userID) && !empty($userID) && isset($password) && !empty($password)) {
        require_once 'phpclass/dbconnect.php';
        require_once 'phpclass/loginClass.php';
        $c = new LoginClass();

        header("Cache-Control: no-cache, must-revalidate");
        header("Content-type: application/json; charset=UTF-8");

        $rs = $c->LoginUserChk($userID,$password,$uID);
        if($rs > 0){
            $user = $c->getUser($userID, $password);
            if ($user != false) {
                $_SESSION['userID'] = $user['userID'];
                $_SESSION['userNM'] = $user['userNM'];
                $_SESSION['admin'] = $user['admin'];

                $row = array("userNM"=>$user['userNM'],"mobileNO"=>$user['mobileNO'],"profileImg"=>$user['idx']);

                $status = "success";
                $message = "";
                $userinfo = $row;
            } else {
                $status = "로그인 에러";
                $message = "다시 한번 시도하시기 바랍니다.";
                $userinfo = null;
            }

        } else if($rs === -1){
            $status = "단말 불일치";
            $message = '등록 단말 정보가 일치하지 않습니다. 관리자에게 문의하시기 바랍니다.';
            $userinfo = null;
        } else {
            $status = "로그인 에러";
            $message = '로그인 정보가 일치하지 않습니다';
            $userinfo = null;
        }
        $result = array(
            'status' => $status,
            'message' => $message,
            'userinfo' => $userinfo
        );
        echo json_encode($result);
    }
} else { // 비정상적인 접속인 경우
    echo 0; // loginChk.php 파일을 직접 실행할 경우에는 화면에 0을 찍어준다.
    exit;
}
?>


본 코드의 안드로이드 처리 부분 (Volley 라이브러리 활용)

https://github.com/jsk005/JavaProjects/blob/master/volleyloginsample/src/main/java/com/link2me/android/loginsample/LoginActivity.java 부분을 살펴보면 이해가 될 것이다.


Retrofit2 활용 예제는 GitHub에는 올리지 않았다.

@Parcelize
data class LoginResult (
    val status: String = "",
    val message: String = "",
    val userinfo: UserInfo? = null
): Parcelable

@Parcelize
data class UserInfo (
        val userNM: String = "",
        val mobileNO: String = "",
        val profileImg: String = ""
): Parcelable

void AutoLoginProgress() {
    userID = PrefsHelper.read("userid", "");
    userPW = PrefsHelper.read("userpw", "");

    if (userID != null && !userID.isEmpty() && userPW != null && !userPW.isEmpty()) {
        String uID = Utils.getDeviceId(mContext); // 스마트폰 고유장치번호
        String mfoneNO = Utils.getPhoneNumber(mContext); // 스마트폰 전화번호
        String AppVersion = String.valueOf(Utils.getVersionCode(mContext));

        mloginService.Login(userID,userPW,uID,mfoneNO,AppVersion)
                .enqueue(new Callback<LoginResult>() {
                    @Override
                    public void onResponse(Call<LoginResult> call, retrofit2.Response<LoginResult> response) {
                        LoginResult result = response.body();
                        if(result.getStatus().contains("success")){
                            PrefsHelper.write("userNM",result.getUserinfo().getUserNM());
                            PrefsHelper.write("mobileNO",result.getUserinfo().getMobileNO());
                            PrefsHelper.write("profileImg",result.getUserinfo().getProfileImg());
                        } else {
                            if(result.getStatus().contains("로그인 에러")){
                                startActivity(new Intent(SplashActivity.this, LoginActivity.class));
                                finish();
                            } else {
                                Utils.showAlert(mContext, result.getStatus(), result.getMessage());
                            }
                        }
                    }

                    @Override
                    public void onFailure(Call<LoginResult> call, Throwable t) {

                    }
                });
    } else {
        startActivity(new Intent(getApplication(), LoginActivity.class));
        finish();
    }
}


블로그 이미지

Link2Me

,