2012-12-27 70 views
2

我正在嘗試爲某個網站創建一個Android應用程序。首先,我需要在這個應用程序上創建一個登錄系統,它會詢問用戶的用戶名和密碼,然後將這些數據發送到服務器上的一些php腳本中,該腳本將檢查數據庫天氣中該用戶是否存在。並因此返回用戶標識。以下是我的核心代碼爲這個過程基於Cookie的Android登錄系統

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(); 

這部分工作正常。我能夠從中得到正確的迴應。現在我需要的是通過cookie或任何其他方法維護此會話,即使用戶關閉此應用程序以保持用戶登錄,直到他手動註銷爲止。 我的login.php有點如下

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

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

我應該怎麼辦呢?

+0

您可能想要使用$ _POST,因爲「登錄」狀態可能被認爲是服務器狀態的變化。我不確定 - 這取決於您的應用程序設計。 –

+0

如果你打算在生產中使用它,你應該改變你的認證服務器,這樣只有你自己的客戶端可以向它發送信息,否則你將遭受暴力破解的攻擊。您還應該通過SSL發送信息或以其他方式加密通過線路發送的用戶名和密碼。我會研究已經提供身份驗證的庫,而不是重新發明輪子。 – Ameen

回答

1

您是否嘗試過使用PHP的session_start(),將數據放置在會話中,並修改它?該腳本將幫助您進行測試。如果可行,你幾乎可以肯定使用PHP setcookie()來保存客戶端狀態。

<?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

但這將全部在服務器上......對吧? 我想維護客戶端的cookie – vishtree

+0

PHP會話使用cookie來查找服務器端數據。因此,這是一種非常簡單的方法,可以查看設備是否像行爲良好的瀏覽器一樣行事,接受並返回cookie。 –

1

在執行請求時應使用HttpContext,然後會話cookie將在httpcontext中處理。每次執行hhtpRequest時,都必須通過httpcontext。

這是維持會話的機制。

+0

Personnally我不使用android的http框架,而是直接從Apache的最後一個版本的http客戶端。所以我的代碼在你的情況下很複雜 – gezdy

+0

你能否詳細說明如何使用httpcontext來處理cookie? – vishtree

+0

使用下面的圖書館http://loopj.com/android-async-http/你可以找到足夠的幫助信息 – gezdy