Идентификатор сессии истекает в android с сервера - PullRequest
0 голосов
/ 27 января 2020

Я создал операцию входа в систему, когда пользователь вводит свое имя пользователя и пароль, а затем нажимает кнопку входа. С сервера, если вход выполнен успешно, то я проверяю все данные с сервера. За исключением оставшегося идентификатора сеанса, все данные поступают с сервера. Но идентификатор сеанса я получаю нулевым

RetrofitInstance. java:

public class RetrofitInstance {

    private static Retrofit retrofit;
    private static final String BASE_URL = "XXXXXXXXXXXXXXXXxx";

    /**
     * Create an instance of Retrofit object
     * */
    public static Retrofit getRetrofitInstance() {

        final HttpLoggingInterceptor interceptor  = new HttpLoggingInterceptor();
        interceptor .setLevel(HttpLoggingInterceptor.Level.BODY);

        CookieHandler cookieHandler = new CookieManager();
        OkHttpClient client = new OkHttpClient.Builder().addNetworkInterceptor(interceptor )
                .cookieJar(new JavaNetCookieJar(cookieHandler))
                .writeTimeout(10, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .build();

        if (retrofit == null) {
            retrofit = new retrofit2.Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(client)
                    .build();
        }
        return retrofit;
    }
}

LoginActivity. java:

Call<Login> call1 = service.GetLoginList(operation,username,generatedKey);

/**Log the URL called*/
Log.wtf("URL Called", call1.request().url() + "");

call1.enqueue(new Callback<Login>() {

@Override
public void onResponse(Call<Login> call1, Response<Login> response) {
    if(response.isSuccessful() ) {

        Login login=response.body();
        String success=login.getSuccess().toString();

        if(success.equals("true")){
            String result= login.getResult().toString();
            Log.i("result", "result" + result);
            String head =response.headers().get("Set-Cookie");
            Log.i("head", "head" + head);
            String sessionId=login.getResult().getSessionId();
            Log.i("sessionId", "sessionId" + sessionId);
            String userId=login.getResult().getUserId();
            Log.i("userId", "userId" + userId);
            String version=login.getResult().getVersion();
            Log.i("version", "version" + version);
            String vtigerVersion=login.getResult().getVtigerVersion();
            Log.i("vtigerVersion", "vtigerVersion" + vtigerVersion);



            if(username.equals("admin")&& pass.equals("Password!1")) {
                Toast.makeText(getApplicationContext(),"Login Successfully",Toast.LENGTH_LONG).show();
                Intent i = new Intent(LoginActivity.this, MainActivity.class);
                startActivity(i);
                finish();
            }else {
                Toast.makeText(getApplicationContext(),"Invalid Username and Password",Toast.LENGTH_LONG).show();
            }


        }
        else {
            Toast.makeText(getApplicationContext(),"Invalid Username and Password",Toast.LENGTH_LONG).show();
        }


    }
}

@Override
public void onFailure(Call<Login> call1, Throwable t) {
    Log.d("error",t.getMessage());
    Toast.makeText(LoginActivity.this, "Something went wrong...Error message: " + t.getMessage(), Toast.LENGTH_SHORT).show();
}
});

Логин. java:

public class Login {

    @SerializedName("success")
    private String success;

    public String getSuccess() {
        return success;
    }

    public void setSuccess(String success) {
        this.success = success;
    }

    public GetLoginList getResult() {
        return result;
    }

    public void setResult(GetLoginList result) {
        this.result = result;
    }

    @SerializedName("result")
    private GetLoginList result;
}

JSON Ответ:

 sessionId: sessionIdnull
 userId: userId19x1
 version: version0.22
 vtigerVersion: vtigerVersion7.1.0

1 Ответ

0 голосов
/ 27 января 2020

HttpLoggingInterceptor.Level.BODY не будет перехватывать заголовки, что не облегчает отладку; лучше использовать HttpLoggingInterceptor.Level.HEADERS вместо. Предполагая, что сервер действительно запускает сеанс ... тогда можно получить его идентификатор с:

String sessionId = response.headers.values("Set-Cookie").toString();

И при повторном его представлении заголовок должен быть "PHPSESSID=" + sessionId.

Время ожидания по умолчанию составляет 15 минут, что также требует обработки.

...