Есть ли у андроида что-то вроде сессий или куки?
Да. Есть две альтернативы.
Вариант № 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-файле.