Может не совсем в тему... Бадался с cookie в своем приложении, использовал Retrofit 2 и OkHttp3 (сервер тоже свой - nginx), сколько ни пробовал примеров с getDefaultSharedPreferences() не получалось сохранить ничего кроме PHPSESSID. Решил вручную записывать через SharedPreferences editor.putString(name, value ); научился сохранять и посылать cookie, но сервер не всегда адекватно на них реагировал: заметил, что если PHPSESSID стоит в конце списка посылаемых cookie, то все нормально, иначе сервер высылает код новой сессии. Когда сложил все cookie в одну строку все заработало.
public class AddCookiesInterceptor implements Interceptor {
public static final String PREF_COOKIES = "PREF_COOKIES";
// We're storing our stuff in a database made just for cookies called PREF_COOKIES.
// I reccomend you do this, and don't change this default value.
private Context context;
public AddCookiesInterceptor(Context context) {
this.context = context;
}
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request.Builder builder = chain.request().newBuilder();
Log.i("MyCookie","------------------------------------");
G_.cookie = PrefStorage.getAllProperty();
String val="";
for(Map.Entryentry : G_.cookie.entrySet()){
val += (String)entry.getValue()+"; ";
}
builder.addHeader("Cookie", val);
Log.i("MyCookie",val);
Log.i("MyCookie","------------------------------------");
return chain.proceed(builder.build());
}
}
public class ReceivedCookiesInterceptor implements Interceptor {
private Context context;
public ReceivedCookiesInterceptor(Context context) {
this.context = context;
} // AddCookiesInterceptor()
@Override
public Response intercept(Chain chain) throws IOException {
Response originalResponse = chain.proceed(chain.request());
if (!originalResponse.headers("Set-Cookie").isEmpty()) {
String tmp;
for(String header : originalResponse.headers("Set-Cookie")) {
tmp = header.split("=")[0];
PrefStorage.addProperty(tmp, header);
}
}
return originalResponse;
}
}
public class PrefStorage { // обязательно инициализировать
public static final String STORAGE_NAME = "StorageName";
private static SharedPreferences settings = null;
private static SharedPreferences.Editor editor = null;
private static Context context = null;
public static void init( Context cntxt ){
context = cntxt;
}
private static void init(){
settings = context.getSharedPreferences(STORAGE_NAME, Context.MODE_PRIVATE);
editor = settings.edit();
}
public static void addProperty( String name, String value ){
if( settings == null ){
init();
}
editor.putString( name, value );
editor.commit();
}
public static String getProperty( String name ){
if( settings == null ){
init();
}
return settings.getString( name, null );
}
public static Map getAllProperty(){
if( settings == null ){
init();
}
return settings.getAll();
}
}
private NetworkService() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder client = new OkHttpClient.Builder()
.addInterceptor(new AddCookiesInterceptor(getApplicationContext()))
.addInterceptor(new ReceivedCookiesInterceptor(getApplicationContext()))
.addInterceptor(interceptor);
mRetrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(client.build())
.build();
}