zoukankan      html  css  js  c++  java
  • 解决getJSON跨域登录Session丢失的问题

    最近在做项目中发现,我用下面的代码异步请求到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 + ")");
    }
    复制代码
  • 相关阅读:
    字符串替换
    字符串查找
    字符串比较
    字节与字符串相互转换
    1365. How Many Numbers Are Smaller Than the Current Number
    1486. XOR Operation in an Array
    1431. Kids With the Greatest Number of Candies
    1470. Shuffle the Array
    1480. Running Sum of 1d Array
    【STM32H7教程】第56章 STM32H7的DMA2D应用之刷色块,位图和Alpha混合
  • 原文地址:https://www.cnblogs.com/skynetfy/p/3332510.html
Copyright © 2011-2022 走看看