会话不适用于 IE 中的 JSONP 调用和 ASP.MVC 中的 Mobile Safari

Posted

技术标签:

【中文标题】会话不适用于 IE 中的 JSONP 调用和 ASP.MVC 中的 Mobile Safari【英文标题】:Session Not working with JSONP calls in IE and Mobile Safari in ASP.MVC 【发布时间】:2015-12-02 02:58:30 【问题描述】:

我有 MVC 应用程序,我们的客户使用我们提供的代码使用 JSONP ajax 调用从他们的网站发送他们的请求。

当我们在 Chrome 和 Firefox 上浏览他们的网站时,MVC 应用程序可以保留会话信息,但是当您从 IE(任何版本)浏览网站时,移动 Safari MVC 应用程序会将每个请求都视为新请求。我不确定这是前端或后端问题(因为在 Chrome 和 FF 中一切正常,我认为它与前端相关)

代码如下:

在我们的 web.config 文件中,我们有这个允许来自任何地方的 CORS:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type, Accept" />
  </customHeaders>
</httpProtocol>

这是我们提供给客户的 JSONP 调用函数

 $.ajax(
    type: "GET",
    url: "<OUR API>?callback=?",
    data: 
        <OUR VARIABLES>
    ,
    beforeSend: setHeader,
    xhrFields: 
        withCredentials: true
    ,
    dataType: "jsonp",
    success: function (data) 
)

function setHeader(xhr) 
  xhr.setRequestHeader('Access-Control-Allow-Origin', '*');

这是处理后端的 C# 代码

public class ClientController : Controller, IRequiresSessionState

    //
    // GET: /
    [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
    public string Index()
    
         if (System.Web.HttpContext.Current.Session["test-var"] != null)
            return "you are here before " + DateTime.Now.ToString("MM/dd/yyyy HH:mm");
        System.Web.HttpContext.Current.Session["test-var"] = "hi";
        return "you are new";
    

【问题讨论】:

【参考方案1】:

您是否尝试添加属性 [WebMethod(EnableSession = true)]

public class ClientController : Controller, IRequiresSessionState

//
// GET: /
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
[WebMethod(EnableSession = true)]
public string Index()

     if (System.Web.HttpContext.Current.Session["test-var"] != null)
        return "you are here before " + DateTime.Now.ToString("MM/dd/yyyy HH:mm");
    System.Web.HttpContext.Current.Session["test-var"] = "hi";
    return "you are new";

【讨论】:

刚试过,没有运气!我在想它与会话 cookie 有关,不知何故 Chrome 和 FF 让 MVC 应用程序创建会话 cookie 而 IE 不能这样做,不确定..

以上是关于会话不适用于 IE 中的 JSONP 调用和 ASP.MVC 中的 Mobile Safari的主要内容,如果未能解决你的问题,请参考以下文章

IE6中的jQuery JSONP问题

Safari/iPhone 和 Opera/Android 中的 JSONP 不起作用

NSURLSessionConfiguration timeoutIntervalForRequest 似乎不适用于后台会话

ActionFilter 不适用于 AJAX 调用

animate() 不适用于 IE 中的不透明度

2D变换过渡不适用于IE11中的VW和VH单元