هماهنگ سازی لاگین بین App و وب سایت
با سلام
برای اینکه تعیین بشه که چه کاربری در حال حاضر لاگین هست و توی لیست کاربران آنلاین هم در وب سایت و هم در App نمایش داده بشه چه راهکاری پیشنهاد می کنید؟
چطور می تونم از آنلاین بودن کاربران مطلع بشم؟
آیا فرستادن Security Tocken به برنامه چاره سازه؟ و آیا خطر امنیتی رو برای سرور به دنبال نداره؟
میتونی از CookieStore برای نگهداری کوکی لاگین استفاده کنی.
دقیقا این روش تو مرورگرها استفاده میشه و خطرات امنیتی رو معمولا پیش فرض سرور ها براش در نظر میگیرن.
با هر درخواستت هم این کوکی رو به سرور میفرستی
با فرض اینکه سمت سرور یه متد با ورب پست برای لاگین کردن داشته باشی :
private static void login() throws ClientProtocolException, IOException {
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("UserName", "aaa"));
params.add(new BasicNameValuePair("Password", "bbb"));
params.add(new BasicNameValuePair("RememberMe", "True"));
String url = urlBase + "/Login/Index";
HttpPost httpPost = new HttpPost(url);
HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
httpPost.setEntity(entity);
invoke(httpPost);
}
میتونی با این متد یه درخواست بسازی. با اجرای این درخواست کوکی مد نظر، سمت سرور ساخته میشه و به کلاینت فرستاده میشه.
میشه از کلاینت این کوکی رو دریافت کرد و هر طور که لازمه نگهش داشت.
CookieStore sCookieStore = ((AbstractHttpClient) httpClient).getCookieStore();
متد invoke میتونه همچین ساختاری داشته باشه
private static String invoke(HttpUriRequest request)
throws ClientProtocolException, IOException {
String result = null;
DefaultHttpClient httpClient = new DefaultHttpClient();
// ارسال کوکی به سرور
if (sCookieStore != null) {
httpClient.setCookieStore(sCookieStore);
}
HttpResponse response = httpClient.execute(request);
// نحوه دریافت اطلاعات به سناریوی برنامه خودت بستگی داره
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
for (String s = reader.readLine(); s != null; s = reader.readLine()) {
builder.append(s);
}
result = builder.toString();
// ذخیره کوکی
sCookieStore = ((AbstractHttpClient) httpClient).getCookieStore();
return result;
}
جایی که وارد کردین " // نحوه دریافت اطلاعات به سناریوی برنامه خودت بستگی داره" منظورتون رو متوجه نمی شم
چه چیزی در اون قسمت دریافت می شه؟
توی catch از Log استفاده کردم، لاگ نمی اندازه اما توی LogCat این خطاها رو می ده
07-02 12:50:53.424: E/lights(212): write_int failed to open /sys/class/sec/sec_touchkey/brightness
07-02 12:50:54.924: E/lights(212): write_int failed to open /sys/class/sec/sec_touchkey/brightness
07-02 12:50:59.994: E/AlarmManagerService(212): android_server_AlarmManagerService_set to type=0, 1404307019.933000000
07-02 12:50:59.994: E/AlarmManagerService(212): android_server_AlarmManagerService_set to type=3, 15133.792000000
07-02 12:51:00.096: E/AlarmManagerService(212): android_server_AlarmManagerService_set to type=3, 14767.998000000
07-02 12:51:00.853: E/AlarmManagerService(212): android_server_AlarmManagerService_set to type=0, 1404305520.000000000
07-02 12:51:21.197: E/Watchdog(212): !@Sync 400
چندتا سوال:
1_ آیا بعد از لاگین اگر کاربر cookie های مرورگرش رو پاک بکنه دوباره باید لاگین کنه؟ و اینکه آیا با خروج از برنامه کوکی ها پاک میشن؟
( من میخوام کاربر یکبار لاگین کنه و تا لاگ اوت نکرده نیازی به ورود دوباره نداشته باشه حتی با خروج از برنامه)
2_ کاربرد قسمت account در خود اندوید چیه ؟ آیا نمیشه به اون وصل کرد؟
3_ سایتم دراپاله . فرقی که توی سرور نداره ؟
بعد از لاگین کوکی رو تو هر جایی که خودت بخوای ذخیره میکنی (البته تو روش بالا). میتونی تو دیتابیس یا فایل باینری نگهش داری. پس کلا ربطی به کوکی های مرورگر نداره.
برای همین لازمه که کوکی ها رو در مواقع نیاز با وب ویو سینک کنی
برای مورد دوم هم میشه گفت 100% بی ربطن
سمت سرور اگه لاگین رو بر اساس کوکی انجام میده با این روش میشه کاربر رو اتوماتیک لاگین کرد. زبان و اپلیکیشن و فریمورک سرور ساید نقشی نداره
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .