在WebView Android中打开新URL时,请维护会话属性



我有一个java/jsp web应用程序,其中search_list.jsp页面上我正在将结果设置在会话对象中 -

<%
  Object resultdata = req.getSession().getAttribute("search_result");
  if(resultdata == null)
  { 
    resultdata  = (SearchResult)getSearchResult();
     request.getSession().setAttribute("search_result", resultdata);
 }
%>

从Web浏览器中查看另一个页面并卷土重来到search_list.jsp.jsp从会话中检索结果对象的工作正常,但是相同的方案始终返回> resultdata null in android本机WebView。以下是Android Native App的WebView码。

public class HomeActivity implements OnClickListener {
  public WebView mWebView;
  public String sessionCookie =  null;
  protected void onCreate(Bundle savedInstanceState) {
            mWebView = (WebView) findViewById(R.id.webView1);
            WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    webSettings.setLoadsImagesAutomatically(true);
              mWebView.loadUrl(appPrefer.getAppURL());          
         mWebView.setWebViewClient(new WebViewClient());
   }
  public void saveSession()
         CookieSyncManager cookieSyncManager =             CookieSyncManager.createInstance(mWebView.getContext());
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptCookie(true);
    if(mWebView!=null)
    {
            sessionCookie = cookieManager.getCookie(getCurrentURLLoad());               
    } 
}
private void addSession(String url) 
  {                 
    CookieSyncManager cookieSyncManager =  CookieSyncManager.createInstance(mWebView.getContext());
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptCookie(true);            
    if (sessionCookie != null) {            
            cookieManager.setCookie(url, sessionCookie);
            CookieSyncManager.getInstance().sync();         
        }
 }

这是本机的单击按钮(这是要回去结果的快捷方式),我正在加载search_list.jsp以再次加载显示结果。但是在Web级别,我们已经搜索并显示结果并查看profile.jsp页面。因此,请单击"本机列表"(url is search_list.jsp),我添加会话如下:

public void onClick(View v) {
if(v.getId().== R.id.listview) 
   {
  saveSession();
  mWebView.loadUrl(HOST_URL + SEARCH_LIST );
      addSession();
    }
 }

我的问题是保存/通过所有其他会话cookie值,但值将值设置为请求。Sessess.session.tributenot top up up the> null,在url在JSP级别上单击JSP级别resultdata的unl更改后始终为null。p> 我尝试了答案中提及的方法,还尝试了-https://gist.github.com/arpit/610754 Way,我始终看到我所有的cookies正确值que ..)..但是httprequest session中设置的属性不存在..我认为它的cookie的一部分是httprequets属性(httpservletrequest-> httpsession-> httpsession-> setAttribute()),我的结论不是在Android WebView或Android WebView或Android WebView出现httpclient侧。请有人让我知道是正确的,或者有一种读取HTTP请求会话属性的方法?

一段时间后调试并更好地理解我的问题,我发现了以下内容:

1)如果在request.getSession()。setAttribute()中设置对象/值,该对象/setAttribute()保存在服务器端,并且不携带http req/res,以便无法访问它们在本地一侧。

2),但是每个服务器板条板jsessionId是获取每个命中或唯一命中的数据的关键。

所以当我保存所有cookie和通过(也有jsessionid cookie)时,为什么它仍然无法在服务器端获得正确的数据?

因此,我的目的是:[不确定这是一个常见问题]

每次在本机侧用户刷新或使用URL启动WebView(一种按钮单击我只是在WebView上重新添加URL,请启动新活动并关闭最后一个活动)。这总是创建服务器端的新jsessionId ..

;(我尝试通过多种方法来通过cookie,以免启动新的会话,甚至保存了最后一个jsessionid cookie并注入了新的负载URL,但没有任何作用。:-(..

因此,最终我必须在URL中添加标头/参数,以指示服务器重新加载,并且会话是新的,因此可以进行相应处理,并且Donot显示未找到结果的错误。

最新更新