zoukankan      html  css  js  c++  java
  • wap开发中发现Session丢失!?

    因为我使用了WebRequest请求数据,比如A.aspx页面请求B.aspx页面,结果发现B.aspx登录后,再次请求B.aspx的时候session丢失了,在WebRequest上设置cookie之后,再次请求B.aspx上可以得到Session,却有发现A.aspx上的Session丢失了,我K,所以就有了如下代码来解决,
    不知道有没有更简单的方法,请高人指点?如此之后wap和web上都有了session, Opera和E680i测试通过
    --------C#代码------------------------------------------------
    HttpWebRequest webRequest = null;
                    Stream stream = null;
                    try
                    {
                        Uri uri = new Uri(url);
                        webRequest = (HttpWebRequest)WebRequest.Create(uri);
                        webRequest.ContentType = "application/x-www-form-urlencoded";
                        webRequest.UseDefaultCredentials = true;
                        webRequest.Credentials = CredentialCache.DefaultCredentials;


                        //string cookieheader = "";
                        //if(webRequest.CookieContainer != null)
                        //   cookieheader = webRequest.CookieContainer.GetCookieHeader(new Uri(url));
                        
                        //CookieContainer cookieCon = new CookieContainer();
                        //webRequest.CookieContainer = cookieCon;
                        //webRequest.CookieContainer.SetCookies(new Uri(url), cookieheader);
                       //如果cookie存在,则需要将cookie设置并且post,否则在请求页面得不到session
                       if (Session["cookie"] != null )
                       {
                           Log.Write(Session["cookie"].ToString());
                           //cookie???header
                           webRequest.Headers.Add("Cookie",Session["cookie"].ToString());
                            //发现这里主页面session丢失的话,需要重新设置主页面的session,不知道是不是microsoft的bug,有时候上传文件session也会丢失,只能重新设置
                           if (Session["user"] == null)
                           {
                               string cookie = Session["cookie"].ToString();
                               string userid = System.Text.RegularExpressions.Regex.Replace(cookie, "(.*)userid=([^&]+)&(.*)", "$2");
                               Log.Write(userid);
                               if (userid.Length == Guid.Empty.ToString().Length)
                               {
                                   Yesun.Edzh.Model.User user = new Yesun.Edzh.BLL.UserService().GetModel(new Guid(userid));
                                   Session.Add("user", user);
                               }
                           }
                       }

                        if (postdata != null && postdata != "")
                        {
                            webRequest.Method = "POST";
                            Stream postStream = webRequest.GetRequestStream();
                            byte[] pPostBytes = System.Text.Encoding.UTF8.GetBytes(postdata);
                            postStream.Write(pPostBytes, 0, pPostBytes.Length);
                            postStream.Flush();
                            postStream.Close();
                        }
                        else
                        {
                            webRequest.Method = "GET";
                        }
                       WebResponse response = webRequest.GetResponse();

                       if (response.Headers["Set-Cookie"] != null && !response.Headers["Set-Cookie"].Equals(""))
                       {   //如果请求页面返回的数据中包含了cookie,则需要保存下来,以便再次请求的时候设置header
                           Session.Add("cookie", response.Headers.Get("Set-Cookie"));
                       }

                       //取得返回数据
                       stream = response.GetResponseStream();
                        objXml = new XmlDataDocument();
                        objXml.Load(stream);

                    }
                    catch (Exception ex)
                    {
                        Log.Write(ex.Message);
                        Log.Write(ex.StackTrace);
                        objXml = new XmlDataDocument();
                        objXml.LoadXml("<root><msg>"+ ex.Message +"</msg></root>");
                    }
                    finally
                    {
                        if (webRequest != null)
                        {
                            webRequest = null;
                        }
                        if (stream != null)
                        {
                            stream.Close();
                            stream = null;
                        }
                    }




    --------Java部分代码---------------------------------------


    try {
                URL url = new URL(serverUrl);
                URLConnection conn = url.openConnection();
                conn.setDoOutput(true);
                
                //如果cookie存在,则发送过去
                if(request.getSession().getAttribute("cookie") != null)
                {
                    conn.setRequestProperty("Cookie", request.getSession().getAttribute("cookie").toString());
                }
                // post数据到服务器
                OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream());
                osw.write(postData);
                osw.flush();
                osw.close();
                // 接收返回的数据xml
                BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
               
                if(conn.getHeaderField("Set-Cookie") != null && !conn.getHeaderField("Set-Cookie").equals(""))
                {
                    request.getSession().setAttribute("cookie", conn.getHeaderField("Set-Cookie"));
                }

                String tmp = "";
                String line = null;
                while ((line = br.readLine()) != null) {
                    tmp += line;
                }
                br.close();
                // 转化为xml
                tmp = new String(tmp.getBytes(), "utf-8");
                //System.out.println("Response : " + tmp);
                objXmlReturn = org.dom4j.DocumentHelper.parseText(tmp);
            } catch (Exception e) {
                e.printStackTrace();
            }


  • 相关阅读:
    Java类变量和成员变量初始化过程
    Linux命令学习笔记
    gitlab本地部署方法(ubuntu16.04+gitlab9.5.5)
    Hanoi塔
    求递归算法时间复杂度:递归树
    最大堆/最小堆
    Matlab中plot基本用法
    这是一篇叼炸天的博客
    c++ static理解
    经典排序算法+文件操作~c语言实现
  • 原文地址:https://www.cnblogs.com/yesun/p/676866.html
Copyright © 2011-2022 走看看