java - 通过 Volley 设置登录 session Cookie

标签 java android session cookies android-volley

我是 Android 和 JAVA 新手,我可以使用 POST 登录,但每次打开应用程序时都必须重新登录。即使我在输入后触摸后退按钮,我也可以返回到登录页面。

如何添加 cookie?

我找了很多代码并尝试了一下,但是在Android Studio(构建)中遇到了错误

登录 Activity :

package com.example.com

import android.content.Intent;
import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;

import java.util.HashMap;
import java.util.Map;

public class GirisAktivitesi extends AppCompatActivity {


    TextView signup, yaziuyegirisi;
    EditText username, userpassword;
    Button btnLogin;

    private static final String loginUrl = "URL";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_giris);
        yaziuyegirisi = findViewById(R.id.yaziuyegirisi);
        username = findViewById(R.id.username);
        userpassword = findViewById(R.id.userpassword);
        signup = findViewById(R.id.usersignup);

        btnLogin = findViewById(R.id.btnUserLogin);



        signup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(GirisAktivitesi.this, YeniKayitAktivitesi.class);
                startActivity(intent);
            }
        });

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                userLogin();
            }
        });
    }

    public void userLogin() {
        StringRequest request = new StringRequest(StringRequest.Method.POST, loginUrl, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {


                try {

                    JSONArray jsonResponse = new JSONArray(response);
                    String registerResultString = jsonResponse.getJSONObject(0).getString("status");
                    String registerMessageString = jsonResponse.getJSONObject(0).getString("message");

                    if (registerResultString.equals("true")) {

                        Toast.makeText(getApplicationContext(), "Sorgulanıyor..", Toast.LENGTH_LONG).show();
                        Intent intent = new Intent(getApplicationContext(), DashboardAktivitesi.class); 
                        startActivity(intent);
                    } else {
                        Toast.makeText(getApplicationContext(), "Entered is unfortunately incorrect", Toast.LENGTH_LONG).show();
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>(); 
                params.put("email", username.getText().toString().trim());
                params.put("password", userpassword.getText().toString().trim()); 
                return params;
            }
        };
        Volley.newRequestQueue(this).add(request);
    }
}

最佳答案

您当前使用的是基本身份验证方法,每次需要登录时都需要将用户名和密码发送到服务器。这迫使您每次与服务器通信时都发送登录请求。

如果您需要使用加密 token 来保存某处并授权您的请求,您应该使用 OAuth2授权系统。该系统使用加密的访问 token 来发出授权请求,这比将用户名和密码保存在应用程序中的某个位置要安全得多。当 token 过期时,您可以使用加密的刷新 token 构建一个新 token 。

因此,从技术上讲,您不需要重新登录,直到用户在另一个客户端上更改他/她的密码,这将迫使用户在您尝试使用刷新 token 构造新密码时通过新密码重新登录访问 token 。

关于java - 通过 Volley 设置登录 session Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52443191/

相关文章:

php - 如何在 PHP 中终止用户 session ?

java - 哪一项指示了 java 应用程序的确切内存使用情况

android - 在 Android 中,Activity 没有看到方向改变?

java - GridView 中的 CheckBox 在 clickable=false 时仍然可以点击

java - Android 通知不发出声音或振动

java session 过滤器

php - 如何将 php session 绑定(bind)到用户 SSL 证书

java - 使用基于 Spring Java 的配置注入(inject) bean 依赖项

java - 对 java if else 性能感到困惑

java - 如果订阅者出现故障,TIBCO EMS 会通知发布者