解决getJSON跨域登录Session丢失的问题_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 解决getJSON跨域登录Session丢失的问题

解决getJSON跨域登录Session丢失的问题

 2013/9/21 11:08:48  凡夫·俗子  博客园  我要评论(0)
  • 摘要:最近在做项目中发现,我用下面的代码异步请求到login.ashx:varmemberUrl=rooturl+'member.ashx?r='+Math.random()+'&jsoncallback=?';//添加jsoncallback参数是为了解决跨域的问题//验证是否已经登录$.getJSON(memberUrl,{type:"checklogin"},function(data){if(data.status==1){//已经登录成功,显示用户信息$('#userinfo')
  • 标签:解决 问题 JSON JS

最近在做项目中发现,我用下面的代码异步请求到login.ashx:

var memberUrl = rooturl + 'member.ashx?r=' + Math.random() + '&jsoncallback=?';   //添加jsoncallback参数是为了解决跨域的问题
//验证是否已经登录 
$.getJSON(memberUrl, { type: "checklogin" }, function (data) {
    if (data.status == 1) {  //已经登录成功,显示用户信息
        $('#userinfo').html('欢迎您' + data.content + '  ' + successHtml);
    } else {  //登录失败
        $('#userinfo').html(waitHtml);
    }
});

第一次请求时登录成功,但当我刷新页面时,却又要再次登录,经过测试发现:在firefox浏览器下是正常的,但在IE下却每次需要再次登录,我打印出来sessionId,发现居然刷新后的sessionID已经改变了,需要查找资料终于找到解决办法:

问题根源:
  IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存 在此问题了。Mircosoft对此的具体描述可以参见 Privacy in Internet Explorer 6

解决办法是在login.ashx中输出P3P的主机头声明: 给个连接 百度文库

http://wenku.baidu.com/view/ea504514866fb84ae45c8d2c.html

代码如下:

public void ProcessRequest(HttpContext context)
{
    string result = string.Empty;
    context.Response.ContentType = "application/Json";

    //业务处理,赋值result......

    //解决IE缓存问题
    context.Response.AddHeader("Cache-Control", "no-cache");
    context.Response.AddHeader("Pragma", "no-cache");

    //解决IE下SessionID丢失的问题
    context.Response.AddHeader("P3P", "CP=CAO PSA OUR");

    //解决跨域问题
    string cb = context.Request["jsoncallback"];
    context.Response.Write(cb + "(" + result + ")");
}

 

 

上一篇: 甲骨文CEO年薪7840万美元 居美国公司CEO之首 下一篇: 没有下一篇了!
发表评论
用户名: 匿名