0

こんにちは私はこれにうんざりしていて、ウェブ上で解決策を見つけることができないので、ここに私の質問があります。ApacheHTTPPOSTを使用してWebサイトにログインしています。私の資格を与える。しかし、ネットからどのコードスニペットを使用しても、応答として常にログインページが返されます。これが私のコードです。解決策を提供してください。

HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);

        try {
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("username", "xxx"));
            nameValuePairs.add(new BasicNameValuePair("password", "xxx"));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            HttpResponse response = httpclient.execute(httppost);

            Log.i("Response num:", "" + response.getStatusLine().toString());

            Log.i("response page:", "" + responseHandler(response));

            Log.i("Headers:", "" + response.getHeaders("Location").toString());

        } catch (ClientProtocolException e) {

        } catch (IOException e) {

        }

そして、phpスクリプトは次のとおりです。

<?php  

session_start();

include('Connectdb.php');



$result = mysql_query("SELECT * FROM user_accounts where username ='".$_POST["username"]."' AND password ='".$_POST["password"]."'");



if($row = mysql_fetch_array($result))

  {

   $_SESSION['Suserid']=$row['hospital_id'];

 // mysql_close($con);

  if ($row['acc_type']=="patient"){
$_SESSION['verifiedUserType']="patient";



 header('Location:./home_P.php');
 }

 else

 if ($row['acc_type']=="admin"){

     $_SESSION['verifiedUserType']="admin";

 header('Location:./home_admin.php');}
 else
 if ($row['acc_type']=="doctor"){

     $_SESSION['verifiedUserType']="doctor";

 header('Location:./home_doc.php');}

 exit;

  }

else

{



mysql_close($con);



//session_start();


 header('Location:./index.php?failed=1');





}

?>

ログイン後にページを取得し、ユーザーがログインした後にCookieを取得してセッションを維持するにはどうすればよいですか?ps間違ったユーザー名またはパスワードを指定しても、http 1.1200OKステータスになります。

4

3 に答える 3

1

アプリケーションに応答処理を実装する必要があります。これは私の最初のアプリケーションからのログイン資格情報のスニペットです。これはあなたのものと非常によく似ており、私にとってはうまくいきました.

    case R.id.login_login_but:
        Toast.makeText(this, "Logging in...", Toast.LENGTH_SHORT).show();

        ArrayList<NameValuePair> postLogin = new ArrayList<NameValuePair>();
        postLogin.add(new BasicNameValuePair("post_user", "User"));
        postLogin.add(new BasicNameValuePair("post_pass", "Pass));

        try {
            String response = null;
            response = CustomHttpClient.executeHttpPost(
                    "http://giveaway.synamegames.com/appfiles/login.php", postLogin);
            String res = response.toString();
            res = res.replaceAll("\\s+", "");

            if (res.equals(1)) {
            // logged in
            } else {
            // incorrect user or password
            }

        } catch (Exception e) {
            Toast.makeText(this, "Server timeout please try again later. You must have internet.", Toast.LENGTH_SHORT).show();
        }
    break;

そして、私が使用したPHPスクリプトは...

<?php
$username=$_POST['post_user'];
$password=$_POST['post_pass'];
$user = 'db_user';
$pswd = 'db_password';
$db = 'db_name';
$server = 'www.domain.com';
$conn = mysql_connect($server, $user, $pswd);
mysql_select_db($db, $conn);
$query=mysql_query("SELECT * FROM users  WHERE  pass =('$password') AND user = $username")or die(mysql_error());

if(mysql_num_rows($query)==1) {
echo 1;
} else {
echo 0;
}
mysql_close($conn);
?>

PS。うまくいった場合は、正しいとマークしてください:)

于 2012-10-16T07:41:18.480 に答える
0

次のように、ログイン要求からCookieのリストを取得できます。

List<Cookie> cookies = httpclient.getCookieStore().getCookies();

そして、リクエストとともに正しいCookieを送り返すには、次を使用します。

CookieStore store = new BasicCookieStore();
store.addCookie(yourCookie);
httpclient.setCookieStore(store);

md5を使用して、パスワードをデータベースに保存することをお勧めします。パスワードをクリアテキストで保存しないでください。多分それはmd5であり、それが機能しない理由ですか?

于 2012-10-16T07:38:44.763 に答える
0

接続を確立した後、名前とパスワードが null かどうかを確認する条件を設定します。

if(users != null && password != null){
            try{
                // send the name and password along with the url
                                // and authenticate the values.

            }catch (JSONException e) {
                e.printStackTrace();
            }
        }

すでにログインが完了している場合、次回はこの条件が自動的に確認され、2 番目のページが開きます。

于 2012-10-16T07:32:48.853 に答える