最近公司布置的一个任务需要用到session,通过一天的折磨终于理解了这个调用机制,下面是我一段webserver和winform使用:
我分享下我几个误区:
1.sessionId可以获取session对象?
我刚开始以为这是可行的,其实是不可以的,这个要从机制说起。
2.sessionId是什么?
其实是服务器返回给浏览器的用来代表身份,每当用户登录成功,服务器返回一个sessionID,浏览器自动把sessionid放到cookie中,并加入每次http 请求的表头中。在我的这个任务中是在winfrom中把sessionid放到cookie中,并加入每次http 请求的表头中。最后服务器会验证sessionid是否匹配,并给出响应的权限。
下面我简单的介绍下我的完成:
webserver:
Stream inputStream = HttpContext.Current.Request.InputStream;
StreamReader reader = new StreamReader(inputStream, System.Text.Encoding.Unicode);
string responseContent = reader.ReadToEnd();
if (Session["UserName"]!=null)
{
responseContent = Session["UserName"].ToString();
}
else
{
Session["UserName"] = responseContent;
responseContent = Session.SessionID;
}
Response.ContentType = "text/plain";
Response.Write(responseContent);
winform:
private void button1_Click(object sender, EventArgs e)
{
string strUrl = "http://localhost:3305/Default.aspx";
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(strUrl);
myReq.Method = "post";
CookieContainer cookies= new CookieContainer();
UnicodeEncoding encoding = new UnicodeEncoding();
string s4 = textBox1.Text;
byte[] byte1 = encoding.GetBytes(s4);
myReq.ContentType = "application/x-www-form-urlencoded";
myReq.ReadWriteTimeout = 1000;
myReq.ContentLength = byte1.Length;
Stream newStream = myReq.GetRequestStream();
newStream.Write(byte1, 0, byte1.Length);
newStream.Close();
HttpWebResponse myRes = (HttpWebResponse)myReq.GetResponse();
Stream streamReq = myRes.GetResponseStream();
StreamReader reader = new StreamReader(streamReq, System.Text.Encoding.UTF8);
string s = reader.ReadToEnd();
textBox1.Text = s;
streamReq.Close();
reader.Close();
}
private void button2_Click(object sender, EventArgs e)
{
string strUrl = "http://localhost:3305/Default.aspx";
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(strUrl);
myReq.Method = "post";
CookieContainer cookies = new CookieContainer();
myReq.CookieContainer = cookies;
Cookie appCookie = new Cookie("ASP.NET_SessionId", textBox1.Text);//注意ASP.NET验证sessionID的名:ASP.NET_SessionId
myReq.CookieContainer.Add(new Uri(strUrl),appCookie);
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] byte1 = encoding.GetBytes("ccc");
myReq.ContentType = "application/x-www-form-urlencoded";
myReq.ReadWriteTimeout = 1000;
myReq.ContentLength = byte1.Length;
Stream newStream = myReq.GetRequestStream();
newStream.Write(byte1, 0, byte1.Length);
newStream.Close();
HttpWebResponse myRes = (HttpWebResponse)myReq.GetResponse();
Stream streamReq = myRes.GetResponseStream();
StreamReader reader = new StreamReader(streamReq, System.Text.Encoding.UTF8);
string s = reader.ReadToEnd();
streamReq.Close();
reader.Close();
MessageBox.Show(s);
}
在textbox中输入:chp,点击button1,textbox变为此次http 请求的sessionid,然后点击button2,出现messagebox显示“chp”字符串,说明winform已经通过sessionID验证!
如果理解有误,欢迎指导,谢谢!!
总结:进过这次的不断学习,终于自己了解的更丰富了呀。程序之路是崎岖的,但是这是我喜欢的生活!!