چگونه میتوانیم کوکی ها را مدیریت کنیم؟
با سلام
یه سایت هست که از طریق کوکی متوجه میشن کاربر لاگین شده یا نه
حالا قرار من اپلیکیشن این سایت رو بنویسم
کارکردش به این صورت هست که هم از طریق httpUrlConnection و هم Volley استفاده کردم که لاگین کردم و اطلاعات کاربری رو گرفتم و چند ثانیه بعد دوباره چک میکنم کاربر لاگین کرده یا نه که کامل اطلاعات کاربری رو بدون اینکه نام کاربری کاربر رو به سرور بفرستم خودش مشخصات رو از سرور میگیره
تا اینجا همه چی درسته ولی فقط کافیه از برنامه خارچ بشم یا به صفحه دیگه برم یا چند ثانیه بگذره همه کوکی ها پاک میشه
به نظرتون چکار کنم خیلی درگیر این موضوع شدم و هیچ راه کاری براش پیدا نکردم و تو اینترنت هیچ سورسی یا راهنمایی پیدا نکردم
ممنون میشم راهنمایی کنین
ممنون میشم کمک کنین آقای mosbai:
ببینین من وقتی urlی که شامل یوزرنیم و پسورد هست رو به تابع زیر میفرستم کوکی رو به هم برمیگردونه و کوکی ها رو میخونم
public static void runUrl(String request)
{
//==================================================
String URL_STRING= request;
Log.d(G.TAG, "cardin>>URL_STRING:" +URL_STRING);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
java.net.CookieManager cookieManager = new java.net.CookieManager();
CookieHandler.setDefault(cookieManager);
try {
URL url = new URL(URL_STRING);
URLConnection connection = url.openConnection();
connection.getContent();
CookieStore cookieStore = cookieManager.getCookieStore();
List<HttpCookie> cookieList = cookieStore.getCookies();
// iterate HttpCookie object
Log.d(G.TAG, "cardin>>All6: " + cookieList.toString());
for (HttpCookie cookie : cookieList) {
// gets domain set for the cookie
Log.d(G.TAG, "cardin>>Domain: " + cookie.getDomain());
cookieDomain=cookie.getDomain();
// gets max age of the cookie
Log.d(G.TAG, "cardin>>max age: " + cookie.getMaxAge());
// gets name cookie
Log.d(G.TAG, "cardin>>name of cookie: " + cookie.getName());
cookieName=cookie.getName();
// gets path of the server
Log.d(G.TAG, "cardin>>server path: " + cookie.getPath());
// gets boolean if cookie is being sent with secure protocol
Log.d(G.TAG, "cardin>>is cookie secure: " + cookie.getSecure());
// gets the value of the cookie
Log.d(G.TAG, "cardin>>value of cookie: " + cookie.getValue());
cookieValue=cookie.getValue();
// gets the version of the protocol with which the given cookie is related.
Log.d(G.TAG, "cardin>>version of cookie: " + cookie.getVersion());
}
}
catch (MalformedURLException e)
{
Log.d(G.TAG, "cardin>>error:" +e.getMessage());
}catch (IOException e)
{
Log.d(G.TAG, "cardin>>error:" +e.getMessage());
}
//==================================================
}
ولی وقتی میخام کوکی های گرفته شده رو ست کنم که در دفعات بعد نیازی نباشه که مجدد یوزر پس رو بفرستم خالی برمیگردونه
public interdace cookiesListener{
public void onReceivecookies(HttpCookie cookies);
}
public static void runUrl(String request,cookiesListener listener)
{
//==================================================
String URL_STRING= request;
Log.d(G.TAG, "cardin>>URL_STRING:" +URL_STRING);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
java.net.CookieManager cookieManager = new java.net.CookieManager();
CookieHandler.setDefault(cookieManager);
try {
URL url = new URL(URL_STRING);
URLConnection connection = url.openConnection();
connection.getContent();
CookieStore cookieStore = cookieManager.getCookieStore();
List<HttpCookie> cookieList = cookieStore.getCookies();
// iterate HttpCookie object
Log.d(G.TAG, "cardin>>All6: " + cookieList.toString());
for (HttpCookie cookie : cookieList) {
listener.onReceive(cookeList);
// gets domain set for the cookie
Log.d(G.TAG, "cardin>>Domain: " + cookie.getDomain());
cookieDomain=cookie.getDomain();
// gets max age of the cookie
Log.d(G.TAG, "cardin>>max age: " + cookie.getMaxAge());
// gets name cookie
Log.d(G.TAG, "cardin>>name of cookie: " + cookie.getName());
cookieName=cookie.getName();
// gets path of the server
Log.d(G.TAG, "cardin>>server path: " + cookie.getPath());
// gets boolean if cookie is being sent with secure protocol
Log.d(G.TAG, "cardin>>is cookie secure: " + cookie.getSecure());
// gets the value of the cookie
Log.d(G.TAG, "cardin>>value of cookie: " + cookie.getValue());
cookieValue=cookie.getValue();
// gets the version of the protocol with which the given cookie is related.
Log.d(G.TAG, "cardin>>version of cookie: " + cookie.getVersion());
}
}
catch (MalformedURLException e)
{
Log.d(G.TAG, "cardin>>error:" +e.getMessage());
}catch (IOException e)
{
Log.d(G.TAG, "cardin>>error:" +e.getMessage());
}
//==================================================
}
کافیه برای استفاده از متد runUrl یه لیستنر cookiesListener درست کنی که به واسطه ی اون هر کوکیه دریافتی رو به لیتنر خبر میده که شما می تونید به راحتی جایی که لیستنر رو تعریف کردید اون کوکی های رو ذخیره کنید !!!
مثل زیر :
cookiesListener listener=new CookiesListener{
@override
public void onReceive(HttpCookie cookie){
// توی اینجا به راحتی می تونی هرکاری خواستی انجام بدی هر کوکی رو می تونی به محض دریافت ذخیره کنی
cookie.getDomain();
cookieName=cookie.getName();
cookieValue=cookie.getValue();
}
};
بنده پیشنهاد می کنم که به جای درست کردن یک متد استاتیک ، یک کلاس برای خوندن کوکی ها درست کنید که از شلوغ کردن کدها جلوگیری کنید
امیدوارم با کدهای بالا مشکلات شما حل بشه .
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .