平板游戏有没有可能用同ip不同端口 cookiee来定位ip

»»关于Cookie跨域的问题
  Cookie是一个伟大的发明,它允许保留他们的用户的登录状态。但是当你的站点有一个以上的域名时就会出现问题了。在Cookie规范上说,一个cookie只能用于一个域名,不能够发给其它的域名。因此,如果在浏览器中对一个域名设置了一个cookie,这个cookie对于其它的域名将无效。如果你想让你的用户从你的站点中的其中一个进行登录,同时也可以在其它域名上进行登录,这可真是一个大难题。
跨二级域名
  我们知道cookie是可以跨二级域名来访问,这个很好理解,例如你 &在的web应用程序创建了一个cookie,要想在这样的二级域名对应的应用程序中访问,就必须你在创建cookie的时候设置domain参数。 以asp.net为例 代码如下:
HttpCookie cookie = new HttpCookie(&name&, &&);
cookie.Domain = &&;
cookie.Path = &/&;
Response.Cookies.Add(cookie);
跨顶级域名
  如果我不是二级域名而是完全在不同顶级域名中,例如
所在的web应用程序创建了一个cookie,想要在
或其二级域名的应用程序中访问,改怎么办呢?我们知道靠常规反的方法是访问不了的,关键我们就是看看有没有方法可以访问。事实是Cookie可以在一定条件下跨域,而不是随心所欲的实现跨域。
  我们来做个测试,看看两个站点 &和 &如何实现cookie跨域访问。 按照常规我们需要有2个顶级域名,并且有DNS服务器才能够配置域名,否则我们是无法验证的,但是这里我们也没有必要那么麻烦,我们可以通过修改hosts文件来模拟。在 c:\windows\system32\drivers\etc 中有 hosts文件,在末尾添加上
两行,就可以将本机用上面的域名访问本机回环地址了。我们只需要在IIS上部署一套程序,ip为本机回环地址,用两个域名分别访问就可以了。
  我们新建三个页面,分别是 Default.aspx、SSO.ashx、GetCookie.aspx。
  其中Default.aspx是 &的页面,访问的地址是 /Default.aspx。看一下前台代码,它没有任何后台代码
&%@ Page Language=&C#& AutoEventWireup=&true& CodeBehind=&Default.aspx.cs& Inherits=&Admin10000.Web.Default& %&
&!DOCTYPE html PUBLIC &-//W3C//DTD XHTML 1.0 Transitional//EN& &http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&&
&html xmlns=&http://www.w3.org/1999/xhtml&&
&head runat=&server&&
&title&&/title&
&form id=&form1& runat=&server&&
&script type=&text/javascript&&
var _frm = document.createElement(&iframe&);
_frm.style.display = &none&;
_frm.src = &/SSO.ashx&;
document.body.appendChild(_frm);
  另外一个是 SSO.ashx 页面,我们认为它是 &的页面,前台没有任何代码,后台代码如下:
using System.Collections.G
using System.L
using System.W
using System.Web.S
using System.Web.SessionS
namespace Admin10000.Web
/// &summary&
/// $codebehindclassname$ 的摘要说明
/// &/summary&
[WebService(Namespace = &http://tempuri.org/&)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class SSO : IHttpHandler
public void ProcessRequest(HttpContext context)
HttpCookie cookie = new HttpCookie(&name&, &&);
cookie.Domain = &&;
cookie.Path = &/&;
cookie.Expires = DateTime.Now.AddMinutes(10000);
context.Response.Cookies.Add(cookie);
context.Response.ContentType = &text/plain&;
context.Response.AddHeader(&P3P&, &CP=CAO PSA OUR&);
context.Response.Write(&&);
public bool IsReusable
  最后是 GetCookie.aspx 页面,它同样是下的页面,没有前台代码,只有后台代码:
using System.Collections.G
using System.L
using System.W
using System.Web.UI;
using System.Web.UI.WebC
namespace Admin10000.Web
public partial class GetCookie : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
if (Request.Cookies[&name&] != null)
Response.Write(Request.Cookies[&name&].Value);
  好了,现在我们访问测试,通过访问 /Default.aspx&之后,这时会通过iframe载入调用SSO.ashx这个页面,执行后台代码创建cookie,然后访问 /GetCookie.aspx &我们得到了相应的cookie。说明在下创建的cookie在下是可以访问到的。
要注意的地方:
  提示 SSO.ashx&的后台代码中有一句:context.Response.AddHeader(&P3P&, &CP=CAO PSA OUR&); 是用来设置P3P响应头。是因为IE浏览器支持的P3P导致iframe跨站点时cookie被阻止,无法创建cookie。(FireFox目前还不支持P3P安全特性,FireFox自然也不存在此问题。不需要添加P3P响应头。)
  通过iframe的src属性将域下的cookie值作为get参数重定向到域下SSO.ashx页面上,SSO.ashx获取域中所传过来的cookie值,并将所获取到值写入cookie中,这样就简单的实现了cookie跨域的访问。
  另外Default.aspx页面也可改为JS调用形式:
&%@ Page Language=&C#& AutoEventWireup=&true& CodeBehind=&Default.aspx.cs& Inherits=&Admin10000.Web.Default& %&
&!DOCTYPE html PUBLIC &-//W3C//DTD XHTML 1.0 Transitional//EN& &http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&&
&html xmlns=&http://www.w3.org/1999/xhtml& &
&head runat=&server&&
&title&&/title&
&form id=&form1& runat=&server&&
&script type=&text/javascript& src=&/SSO.ashx&&&/script&
验证消息:Admin10000
提示:更多精彩内容关注微信公众号:全栈开发者中心(admin10000_com)
理智评论文明上网,拒绝恶意谩骂 发表评论 / 共0条评论
登录会员中心}

我要回帖

更多关于 ip cookie 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信