会话不适用于 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的主要内容,如果未能解决你的问题,请参考以下文章
Safari/iPhone 和 Opera/Android 中的 JSONP 不起作用
NSURLSessionConfiguration timeoutIntervalForRequest 似乎不适用于后台会话