因为我使用了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();
}