跨域读取Cookie和session之HttpWebRequest另类方法(网站API开发)
2009-01-06 15:34
609 查看
在网上找了很多跨域读取Cookie的方法,但都是A域主动设置B域的Cookie,而没有B域去获取A域Cookie的方法。
若要转载,请注名出处
http://blog.csdn.net/try530/archive/2009/01/06/3721525.aspx
所谓A域主动设置B域的Cookie
1:在B.com上新建一文件:SetCookie.aspx
protected
void
Page_Load(
object
sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader(
"p3p"
,
"CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
);
HttpCookie cookie =
new
HttpCookie(
"userid"
,
"44"
);
cookie.Domain =
".b.com"
;
// cookie.Expires = DateTime.Now.AddSeconds((double)expires);
HttpContext.Current.Response.AppendCookie(cookie);
}
2:在A域新建一文件:Default.aspx,在前台页面调用B域的SetCookie.aspx页面,来为B域设置相应的Cookie.
<script src=
"http://www.b.com/SetCookie.aspx"
></script>
3:在B域新建一文件:Default.aspx来显示被A域设置的Cookie。
protected
void
Page_Load(
object
sender, EventArgs e)
{
Response.Write(Request.Cookies[
"userid"
] ==
null
?
""
: Request.Cookies[
"userid"
].Value.ToString());
}
4:以此访问www.a.com/default.aspx---->www.b.com/default.aspx
以上为A域主动设置B域的Cookie,适用于单点登录,但必须在B域,C域或D域上新建setcookie.aspx文件来让A域帮忙设置Cookie。
那B域C域或D域如何根据自身的需要去主动获取A域的Cookie呢?请看以下方法,以下方法为此文重点。
1:在A域新建一文件:SetCookie.aspx,此文件用来设置A域自己的Cookie。
protected
void
Page_Load(
object
sender, EventArgs e)
{
HttpCookie cookie =
new
HttpCookie(
"userid"
,
"44"
);
HttpContext.Current.Response.AppendCookie(cookie);
}
2:A域的Cookie设置完了,那怎么让其他域来读取自己的Cookie呢,这就是重点了。
新建一页面:OpenID.aspx,用来让B域读取Cookie,并自动设置B域的cookie。(这里有点昏)
protected
void
Page_Load(
object
sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader(
"p3p"
,
"CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
);
if
(Request.Cookies[
"userid"
] !=
null
)
{
Response.Write(@"
var userid=
" + Request.Cookies["
userid
"].Value.ToString() + @"
;
SetCookie(
'userid'
,userid);//什么域调用此文件,设置的Cookie将是什么域的。
window.location.href=document.URL;
function SetCookie(name,value)
//两个参数,一个是cookie的名子,一个是值
{
document.cookie = name +
""
=
""
+ escape (value) ;
}
");
}
else
{
Response.Write(
"document.write('没有cookie');"
);
}
}
3:A域的工作已经完了,那B域如何得到A域的这个Cookie值呢,在B域新建一页:default.aspx
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(HttpContext.Current.Request.Cookies[
"userid"
] !=
null
)
{
Label1.Text = HttpContext.Current.Request.Cookies[
"userid"
].Value.ToString();
}
else
{
Response.Write(
" <script src=/"http://www.a.com/openid.aspx/"></script>"
);
}
}
4:依次访问 www.a.com/setcookie.aspx ------> www.b.com/default.aspx 此方法用于A域开发API给其他域调用。主要用于A域API接口的开发。就像现在的SNS网站提供当前登录的用户信息给其他应用程序(如抢车位)一样,不过我不知道他们是怎么实现的,但我用此方法实现了。
总结下此方法的步骤:
1:A域设置cookie
2:B域用调用javascript脚本的方式读取A域cookie,读取后,并同步设置B域Cookie.
3:调用B域时,发现没有cookie就自动从A域获取cookie值来设置自己的Cookie。
A域可以把怎么读取的方法做成dll,提供给其他域。这称之为A域的API。
测试成功,用此方法能跨域读取session,方式是:把A域的Session值存入B域的cookie中。至于怎么存,存在什么cookie名称里,由A域提供。
若要转载,请注名出处
http://blog.csdn.net/try530/archive/2009/01/06/3721525.aspx
所谓A域主动设置B域的Cookie
1:在B.com上新建一文件:SetCookie.aspx
protected
void
Page_Load(
object
sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader(
"p3p"
,
"CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
);
HttpCookie cookie =
new
HttpCookie(
"userid"
,
"44"
);
cookie.Domain =
".b.com"
;
// cookie.Expires = DateTime.Now.AddSeconds((double)expires);
HttpContext.Current.Response.AppendCookie(cookie);
}
2:在A域新建一文件:Default.aspx,在前台页面调用B域的SetCookie.aspx页面,来为B域设置相应的Cookie.
<script src=
"http://www.b.com/SetCookie.aspx"
></script>
3:在B域新建一文件:Default.aspx来显示被A域设置的Cookie。
protected
void
Page_Load(
object
sender, EventArgs e)
{
Response.Write(Request.Cookies[
"userid"
] ==
null
?
""
: Request.Cookies[
"userid"
].Value.ToString());
}
4:以此访问www.a.com/default.aspx---->www.b.com/default.aspx
以上为A域主动设置B域的Cookie,适用于单点登录,但必须在B域,C域或D域上新建setcookie.aspx文件来让A域帮忙设置Cookie。
那B域C域或D域如何根据自身的需要去主动获取A域的Cookie呢?请看以下方法,以下方法为此文重点。
1:在A域新建一文件:SetCookie.aspx,此文件用来设置A域自己的Cookie。
protected
void
Page_Load(
object
sender, EventArgs e)
{
HttpCookie cookie =
new
HttpCookie(
"userid"
,
"44"
);
HttpContext.Current.Response.AppendCookie(cookie);
}
2:A域的Cookie设置完了,那怎么让其他域来读取自己的Cookie呢,这就是重点了。
新建一页面:OpenID.aspx,用来让B域读取Cookie,并自动设置B域的cookie。(这里有点昏)
protected
void
Page_Load(
object
sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader(
"p3p"
,
"CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
);
if
(Request.Cookies[
"userid"
] !=
null
)
{
Response.Write(@"
var userid=
" + Request.Cookies["
userid
"].Value.ToString() + @"
;
SetCookie(
'userid'
,userid);//什么域调用此文件,设置的Cookie将是什么域的。
window.location.href=document.URL;
function SetCookie(name,value)
//两个参数,一个是cookie的名子,一个是值
{
document.cookie = name +
""
=
""
+ escape (value) ;
}
");
}
else
{
Response.Write(
"document.write('没有cookie');"
);
}
}
3:A域的工作已经完了,那B域如何得到A域的这个Cookie值呢,在B域新建一页:default.aspx
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(HttpContext.Current.Request.Cookies[
"userid"
] !=
null
)
{
Label1.Text = HttpContext.Current.Request.Cookies[
"userid"
].Value.ToString();
}
else
{
Response.Write(
" <script src=/"http://www.a.com/openid.aspx/"></script>"
);
}
}
4:依次访问 www.a.com/setcookie.aspx ------> www.b.com/default.aspx 此方法用于A域开发API给其他域调用。主要用于A域API接口的开发。就像现在的SNS网站提供当前登录的用户信息给其他应用程序(如抢车位)一样,不过我不知道他们是怎么实现的,但我用此方法实现了。
总结下此方法的步骤:
1:A域设置cookie
2:B域用调用javascript脚本的方式读取A域cookie,读取后,并同步设置B域Cookie.
3:调用B域时,发现没有cookie就自动从A域获取cookie值来设置自己的Cookie。
A域可以把怎么读取的方法做成dll,提供给其他域。这称之为A域的API。
测试成功,用此方法能跨域读取session,方式是:把A域的Session值存入B域的cookie中。至于怎么存,存在什么cookie名称里,由A域提供。
相关文章推荐
- 跨域读取Cookie和session之HttpWebRequest另类方法(网站API开发)
- 转 跨域读取Cookie和session之HttpWebRequest另类方法(网站API开发)
- 跨域读取Cookie和session之HttpWebRequest另类方法(网站API开发)
- 跨域读取Cookie和session之HttpWebRequest另类方法
- HttpWebRequest采集读取网站挂载Cookie的通用方法
- (微信API接口开发) 使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理
- 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- [保存]C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- HttpWebRequest跨域cookie的访问
- 【原创】网站抓包HttpWebRequest不返回Javascript生成的Cookie的解决办法
- Struts2访问web元素(包括:request,session,application和HttpServletRequest,HttpServletSession, HttpServletContext)的4种方法
- 修复.NET中通过HttpWebRequest 中GET 方法丢失Cookie的bug
- 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- VB.net使用httpWebRequest访问带cookie的网站时如何传递cookie值
- 用httpwebrequest访问跨域网站时对CookieContainer的处理
- 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- httpwebreqeust读取httponly的cookie方法
- C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie