2012-12-27 2 views
2

일부 웹 사이트에 대한 안드로이드 애플 리케이션을 만들려고합니다. 먼저 사용자에게 사용자 이름과 암호를 묻는이 로그인 정보 시스템을 만들어서이 데이터를 서버의 PHP 스크립트로 보내면이 사용자가 데이터베이스에 날씨가 있는지 여부를 확인합니다. 따라서 사용자 ID를 반환합니다. 다음은이 프로세스의 핵심 코드입니다.안드로이드의 쿠키 기반 로그인 시스템

myurl="http://10.0.2.2:80/login.php?username=name&pass=password" 
       URL url = new URL(myurl); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(10000 /* milliseconds */); 
      conn.setConnectTimeout(15000 /* milliseconds */); 
      conn.setRequestMethod("GET"); 
      conn.setDoInput(true); 
      // Starts the query 
      conn.connect(); 
      int response = conn.getResponseCode(); 

이 부분은 제대로 작동합니다. 나는 이것으로부터 올바른 응답을 얻을 수있다. 이제 내가 필요한 것은 쿠키 나 다른 방법을 통해이 세션을 유지하는 것입니다. 사용자가이 애플리케이션을 닫아서 수동으로 로그 아웃하지 않는 한 사용자가 로그인 상태를 유지하도록합니다. 내가 할 방법

<?php 
$name = $_GET['username']; 
$pass = $_GET['pass']; 
$userid = checkLogin($name, $pass); 

if($userid!=NULL) { 
    echo $userid; 
} else { 
    echo ""; 
} 
?> 

에 따라 다소 나의 login.php은?

+0

"로그인 한 상태"가 서버 상태의 변화로 간주 될 수 있으므로 $ _POST를 사용할 수 있습니다. 나는 그것에 대해 확신하지 못합니다. 그것은 앱 디자인에 달려 있습니다. –

+0

프로덕션 환경에서 이것을 사용하려는 경우 인증 서버를 변경하여 자신의 클라이언트 만 정보를 보낼 수 있도록해야합니다. 그렇지 않으면 암호 찾기에 무차별 한 시도를 받게됩니다. 또한 SSL을 통해 정보를 보내거나 다른 방법으로 유선을 통해 전송 된 사용자 이름과 암호를 암호화해야합니다. 휠을 재발 명하는 대신 이미 인증을 제공하는 라이브러리를 살펴볼 것입니다. – Ameen

답변

1

PHP session_start()를 사용하여 세션에 데이터를 배치하고 수정 해 보았습니까? 이 스크립트는 테스트를하는 데 도움이됩니다. 이것이 작동한다면, 클라이언트 상태를 보존하기 위해 거의 확실하게 PHP setcookie()를 사용할 수 있습니다. 귀하의 요청을 실행 한 후 세션 쿠키가있는 HttpContext 내에서 처리 될 때

<?php // RAY_session_test.php 
error_reporting(E_ALL); 


// DEMONSTRATE HOW PHP SESSIONS WORK 
// MAN PAGE HERE: http://php.net/manual/en/function.session-start.php 


// START THE SESSION (DO THIS FIRST, UNCONDITIONALLY, IN EVERY PHP SCRIPT ON EVERY PAGE) 
session_start(); 

// INITIALIZE THE SESSION ARRAY TO SET A DEFAULT VALUE 
if (empty($_SESSION["cheese"])) $_SESSION["cheese"] = 1; 

// SEE IF THE CORRECT SUBMIT BUTTON WAS CLICKED 
if (isset($_POST['fred'])) 
{ 
    // ADD ONE TO THE CHEESE 
    $_SESSION['cheese']++; 
} 

// RECOVER THE CURRENT VALUE FROM THE SESSION ARRAY 
$cheese = $_SESSION['cheese']; 


// END OF PROCESSING SCRIPT - CREATE THE FORM USING HEREDOC NOTATION 
$form = <<<ENDFORM 
<html> 
<head> 
<title>Session Test</title> 
</head> 
<body> 
Currently, SESSION["cheese"] contains: $cheese<br/> 
<form method="post"> 
<input type="submit" value="increment this cheese" name="fred" /> 
<input type="submit" value="leave my cheese alone" name="john" /> 
</form> 
</body> 
</html> 
ENDFORM; 

echo $form; 
+0

하지만이 모든 것이 서버에 ... 맞습니까? 클라이언트 측에서 쿠키를 유지하려고합니다. – vishtree

+0

PHP 세션은 쿠키를 사용하여 서버 측 데이터를 찾습니다. 따라서 기기가 정상적으로 작동하는 브라우저처럼 작동하는지 확인하고 쿠키를 수락하고 반환하는 매우 쉬운 방법입니다. –

1

당신은 HttpContext를 사용해야합니다. hhtpRequest를 실행할 때마다 httpcontext를 전달해야합니다.

이것은 세션을 유지 관리하는 메커니즘입니다.

+0

개인적으로 나는 안드로이드의 http 프레임 워크를 사용하지 않고 아파치의 http 클라이언트의 마지막 버전을 직접 사용한다. 그래서 내 코드는 당신의 경우에 매우 복잡하다. – gezdy

+0

쿠키를 처리하기 위해 httpcontext를 사용하는 방법에 대해 더 자세히 설명 해주시겠습니까 ?? – vishtree

+0

다음 librarie http://loopj.com/android-async-http/을 사용하면 충분한 정보를 찾을 수 있습니다. – gezdy