Android HTTP вопросы для входа - PullRequest
9 голосов
/ 17 апреля 2011

Привет, ребята, у меня есть несколько вопросов о реализации функции входа в Android.

1. Does android have anything like sessions or cookies? Как мне «запомнить», что пользователь вошел в систему? Очевидно, я не хочу просить пароль каждый раз, когда мое приложение используется!

2. Should I hash the password before sending it to the server? В моей базе данных есть таблица со столбцом пользователя и пароля. Когда я хочу проверить логин, должен ли я отправлять хэшированный пароль на сервер, например login.php?u=sled&p=34819d7beeabb9260a5c854bc85b3e44, или просто обычный текст, такой как login.php?u=sled&p=mypassword, и хэшировать его на сервере перед выполнением аутентификации?

1 Ответ

9 голосов
/ 17 апреля 2011

Есть ли у андроида что-то вроде сессий или куки?

Да. Есть две альтернативы.

Вариант № 1:

Вы можете использовать CookieManager, чтобы установить cookie.

Вариант № 2:

Другая альтернатива (я использую эту альтернативу в одном из моих приложений) - захватить ваш файл cookie после отправки вашего имени пользователя и пароля на сервер (например, через HttpPost или HttpGet). В вашем вопросе вы используете $_GET стиль аутентификации при входе в систему, поэтому мой пример кода будет использовать HttpGet.

Пример кода с использованием HttpGet:

HttpParams httpParams = new BasicHttpParams();   

// It's always good to set how long they should try to connect. In this
// this example, five seconds.
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, 5000);

DefaultHttpClient postClient = new DefaultHttpClient(httpParams);           
// Your url using $_GET style.
final String url = "www.yourwebsite.com/login.php?u=myusername&p=mypassword";
HttpGet httpGet = new HttpGet(url);
HttpResponse response;

try {   
    // Execute your HttpGet against the server and catch the response to our
    // HttpResponse.
    response = postClient.execute(httpGet);

    // Check if everything went well.
    if(response.getStatusLine().getStatusCode() == 200) {   
        // If so, grab the entity.          
        HttpEntity entity = response.getEntity();

        // If entity isn't null, grab the CookieStore from the response.
        if (entity != null) {
            CookieStore cookies = postClient.getCookieStore();  
            // Do some more stuff, this should probably be a method where you're
            // returning the CookieStore.    
        }                   
    }

} catch (Exception e) {
}

Теперь, когда у вас есть CookieStore; возьмите из него список файлов cookie, после чего вы можете использовать Cookie для определения имени, домена, значения и т. д. *

В следующий раз вы пытаетесь получить доступ к «заблокированному» контенту вашего сайта; установите куки на HttpURLConnection из вашей Cookie информации:

URL url = new URL("www.yourwebsite.com/lockedcontent.php");

HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

httpURLConnection.setInstanceFollowRedirects(false);
// "Host" and "Cookie" are fields in the HTTP response. Use WireShark
// via your computer to determine correct header names.
httpURLConnection.setRequestProperty("Host", domainOfYourCookie);
httpURLConnection.setRequestProperty("Cookie", valueOfYourCookie);

final int responseCode = httpURLConnection.getResponseCode();

// And get the content...

Должен ли я хэшировать пароль перед отправкой на сервер?

Зависит от того, как устроена ваша система. Вы должны иметь правильную информацию при отправке на свой сервер. Это также зависит от того, как вы хэшируете свою информацию в своем .php файле.

Как мне «запомнить», что пользователь вошел в систему?

Сохраните информацию в SharedPreferences или в другом месте. Как я уже говорил ранее, вы можете хэшировать его, если ваша система входа в систему правильно спроектирована - это зависит от того, как вы хэшируете ее в своем .php-файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...