1

Androidでサーバークライアントアプリケーションを開発していて、アプリケーションのサーバー側でセッションを使用していますが、サーバーでセッションが失われることがあります。追伸:サーバーでhttps接続を使用しています。

私はこれらを使用してセッションを開催しています:

  • 私は単一インスタンスのDefaultHttpClientを使用しており、すべてのhttpリクエストに使用しています。
  • httpPostメソッドのみを使用します
  • https証明書のみを使用します:

    SchemaRegistry.register(new Scheme( "https"、sslSocketFactory、443)); ClientConnectionManager cm = new ThreadSafeClientConnManager(params、schemeRegistry);

  • すべてのhttpリクエストの後にCookieを保存します。

    private void createSessionCookie(){

    List<Cookie> cookies = httpclient.getCookieStore().getCookies();
    
    if (! cookies.isEmpty()){
    
        CookieSyncManager.createInstance(ctx);
        CookieManager cookieManager = CookieManager.getInstance();
    
        //sync all the cookies in the httpclient with the webview by generating cookie string
        for (Cookie cookie : cookies){
    
            Cookie sessionInfo = cookie;
    
            String cookieString = sessionInfo.getName() + "=" + sessionInfo.getValue() + "; domain=" + sessionInfo.getDomain();
            cookieManager.setCookie(UrlConstants.SERVICE_PRE_URL, cookieString);
            CookieSyncManager.getInstance().sync();
        }
    }
    

    }

私はこれらをしているのに、私はセッションを失います。この問題を解決するのを手伝ってください。アドバイスをありがとうございます。よろしくお願いします。

4

1 に答える 1

3

Cookieを手動で使用するのではなくCookieStore、どこかに静的なものを作成し、それをに割り当てて、HttpContextそのコンテキストをリクエストで使用するだけです。クッキーは自動的に保存および復元されます。

これらはあなたのクラスのメンバーです:

private static CookieStore cookieStore = new BasicCookieStore();
private HttpClient httpclient = new DefaultHttpClient();
private HttpPost post = new HttpPost("your url here");

そして、この部分は、要求を行うメンバー関数に入ります。

HttpContext ctx = new BasicHttpContext();
ctx.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

HttpResponse result = httpclient.execute(post,ctx);
于 2012-05-02T09:45:44.140 に答える