java - Android 强制更新 Webview session

标签 java android session webview session-cookies

我有一个嵌入了 Webview 的 Android 应用程序和一个该应用程序连接到的网站。当用户登录(或注销)时, session 数据似乎需要大约一两分钟的时间才能存储在永久内存中。

这样做的结果是,如果登录(或注销)后应用程序立即关闭,则 session 数据不会持久化,稍后再次打开应用程序将恢复到之前的 session 。

这看起来像是某种缓存问题,我已经四处寻找解决方案,但我似乎无法找到任何方法来强制更新 session 数据,如果有人能给我指出正确的方向,我将不胜感激。

最佳答案

工作示例:

  public class SessionManager {

    public void setPreferences(Context context, String key, String value) {

        SharedPreferences.Editor editor = context.getSharedPreferences("Androidwarriors", Context.MODE_PRIVATE).edit();
        editor.putString(key, value);
        editor.commit();

    }


    public String getPreferences(Context context, String key) {

        SharedPreferences prefs = context.getSharedPreferences("Androidwarriors", Context.MODE_PRIVATE);
        String position = prefs.getString(key, "");
        return position;
    }
}

例如启动画面、应用程序的一个屏幕

public class Splash extends AppCompatActivity {
SessionManager manager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
    manager=new SessionManager();

    // METHOD 1

    /****** Create Thread that will sleep for 3 seconds *************/
    Thread background = new Thread() {
        public void run() {

            try {
                // Thread will sleep for 3 seconds
                sleep(3*1000);

                // After 5 seconds redirect to another intent
                String status=manager.getPreferences(Splash.this,"status");
                Log.d("status",status);
                if (status.equals("1")){
                    Intent i=new Intent(Splash.this,MainActivity.class);
                    startActivity(i);
                }else{
                    Intent i=new Intent(Splash.this,LoginActivity.class);
                    startActivity(i);
                }


                //Remove activity
                finish();

            } catch (Exception e) {

            }
        }
    };

    // start thread
    background.start();


}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//***Change Here***
    startActivity(intent);
    finish();
    System.exit(0);
}
}

添加到登录 Activity

 manager.setPreferences(LoginActivity.this, "status", "1");
    String status=manager.getPreferences(LoginActivity.this,"status");
    Log.d("status", status);
    // Toast.makeText(getBaseContext(), "Bem-Vindo", Toast.LENGTH_LONG).show();
     Intent i = new Intent(LoginActivity.this, Web.class);
    startActivity(i);

在 webview 类上

public class Web extends AppCompatActivity {
//private WebView webView;

SessionManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web_view);

    manager = new SessionManager();



   // webView = (WebView) findViewById(R.id.webView);
    WebView webView = new WebView(this);
    final WebSettings settings = webView.getSettings();
    webView.getSettings().setJavaScriptEnabled(true);
    settings.setJavaScriptEnabled(true);
    settings.setAppCacheEnabled(false);
    settings.setPluginState(WebSettings.PluginState.ON);
    setContentView(webView);
    webView.setWebViewClient(new WebViewClient());
    webView.loadUrl("link");

}




@Override
public void onBackPressed() {
    super.onBackPressed();

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//***Change Here***
    startActivity(intent);
    finish();
    System.exit(0);
}

}

要关闭 session ,请使用此

  manager.setPreferences(Web.this, "status", "0");
            finish();

关于java - Android 强制更新 Webview session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40742680/

相关文章:

Java 对象的泛型类型

c# - 调试 ASP.NET 时 session 清除结束,但在开发和测试服务器上工作正常

c# - 如何生成新的 session ID

java - 在二维数组中填充随机数以进行列/行相加

java - 如何使用多态性在运行时根据实例加载 fragment ?

java - 无法在服务中未在 locationManager 上调用 Looper.prepare() 的线程内创建处理程序

具有很长 URL 的 Android HttpGet 请求

c# - 如何在 C# ASP.Net session 中保存对象数组?

java - 如何将联系人添加到群组 android

java - 如何使用 kafka 模式管理和 Avro 进行重大更改