آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

چگونه میتوانیم کوکی ها را مدیریت کنیم؟

mahdiFar77  9 سال پیش  9 سال پیش
0 0

با سلام

یه سایت هست که از طریق کوکی متوجه میشن کاربر لاگین شده یا نه 

حالا قرار من اپلیکیشن این سایت رو بنویسم 

کارکردش به این صورت هست که هم از طریق httpUrlConnection  و هم Volley استفاده کردم که لاگین کردم و اطلاعات کاربری رو گرفتم و چند ثانیه بعد دوباره چک میکنم کاربر لاگین کرده یا نه که کامل اطلاعات کاربری رو بدون اینکه نام کاربری کاربر رو به سرور بفرستم خودش مشخصات رو از سرور میگیره 

تا اینجا همه چی درسته ولی فقط کافیه از برنامه خارچ بشم یا به صفحه دیگه برم یا چند ثانیه بگذره همه کوکی ها پاک میشه 

به نظرتون چکار کنم خیلی درگیر این موضوع شدم و هیچ راه کاری براش پیدا نکردم و تو اینترنت هیچ سورسی یا راهنمایی پیدا نکردم 

ممنون میشم راهنمایی کنین

0 0
سلام .1. شما می تونی با استفاده از سرویس برنامه رو اکتیو نگه داری .2. می تونی در قسمت onStop مشخصات لوگین کاربر رو ذخیره کنی و بعد در قسمت onStart اکتیویتی دوباره اطلاعات ذخریه شده رو بخونی . و ..... .روش های متفاوت و زیادی برای انجام کار شما وجود داره که بسته به نوع کار شما باید انتخاب بشن . اگر سوالتون رو یه مقدار واضح تر بگید شاید بهتر بتونم کمکتون کنم ! (9 سال پیش)
0 0
برنامه اکتیو هست.حتی وقتی به یه اکتیویتی دیگه میرم و دوباره برمیگردم کوکی رو نگه نمیداره (9 سال پیش)
0 0
سوالم اینه که چطور میتونم تو اندروید با کوکی ها کار کنم (9 سال پیش)
0 0
چطوری میتونم کوکی های گرفته شده رو توی ریکوست های بعدی ست کنم؟ (9 سال پیش)
0 0
بسته به خودتون داره . یه راهش اینه که می تونید وقتی که اونا رو می خونید توی یه دیتابیس ذخیره کنید و دفعه بعد اونا رو از روی دیتابس بخونید و توی ریکوست های بعدی ست کنید (9 سال پیش)
0 0
سلام. کوکی در اندروید مانند وب نیست، در اندروید مقادیر در رم ذخیره میشن و اگر رم خالی بشه کوکی ها و ... از بین میرن یا قابل دسترسی نیستن (تا اونجایی که من میدونم). برای این راه، شما چند راه داری، اول اینکه از سرور توکن بگیری و این توکن طی زمان هایی ReGenerate بشه که معلوم بشه کاربر چه زمانی غیر فعال بوده. مثلا اگر یک توکن ۲۴ ساعت اعتبار داشته باشه، کاربری که اونو بعد از ۲۴ ساعت درخواست بده، باید توکن جدید بگیره و سرور میفهمه که این کاربر ۲۴ ساعته که از طریق اپ هیچ فعالیتی نداشته. راه دیگه اینکه زمانی که اپ باز میشه، یک Api برای چک کردن ورژن اپلیکیشن چک بشه. با این سرویس، سرور میتونه به راحتی یک Query بزنه و لیست کاربرایی که در طول روز این سرویس رو حداقل یک بار کال کردن رو در بیاره. برای این روش هم باید یک توکن وجود داشته باشه ولی نیاز به ReGenerate نیست. راه های دیگه ای هم هست مثلا استفاده از سوکت که در تمام اکتیویتی ها ست کنید و ... ولی پیشنهاد من همین ۲ روشه یا ادغامی از این دو. (9 سال پیش)
0 0
سلام آخه این پروژه ای که گرفتم براساس کوکی متوجه میشن که کاربر لاگین کرده یا نه. برای مثال وقتی میخاد لیست آدرس های ذخیره شده کاربر رو نشون بده از کوکی متوجه میشه که کدوم کاربر لاگین کرده و آدرس های مربوط به اون کاربر رو نشون میده چون قبلن که پروژه شون با آنگولار نوشتن و بسیار زمانبر هستکه سمت سرور رو بخان تغییر بدن واقعن موندم چکار کنم (9 سال پیش)
0 0
والا من تا حالا سمت اندروید با کوکی ها کار نکردم، ولی تا جایی که میدونم در کلاینت از این روش استفاده نمیکنیم. اگر راهی پیدا نکنید، این هنره شماست که بهشون بگید نمیشه و قانعشون کنید که تغییراتی سمت سرور نیاز دارن. (9 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
mahdiFar77  9 سال پیش
0 0

ممنون میشم کمک کنین آقای 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());
}
//==================================================

}

ولی وقتی میخام کوکی های گرفته شده رو ست کنم که در دفعات بعد نیازی نباشه که مجدد یوزر پس رو بفرستم خالی برمیگردونه
0 0
سلام . اگر در log کوکی نمایش داده میشه مشکل شما در اینه که نمی تونید کوکی ها رو به اکتیویتی مورد نظر بفرستید که در اونجا ذخیرش کنید بهترین روش برای حل این مشکل اینه که یه اینترفیس listener درست کنید که به یکی از ورودی های متد باشه و به واسطه اون تغییرات رو به صورت آنی ببینید !کدهای زیر رو ببینید (9 سال پیش)
پاسخ به سوال 
mosbai  9 سال پیش
0 0

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();
}
};

بنده پیشنهاد می کنم که به جای درست کردن یک متد استاتیک ، یک کلاس برای خوندن کوکی ها درست کنید که از شلوغ کردن کدها جلوگیری کنید

امیدوارم با کدهای بالا مشکلات شما حل بشه .

 

0 0
کوکی رو میگیرم .چطور میتونم تو ریکوئست های بعدی همین کوکی رو ست کنم؟ (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .