通过AJAX设置时,不保留iOS 6 Mobile Safari会话变量

iOS 6 Mobile Safari Session Variables not retained when set via AJAX

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Is Safari on iOS 6 caching $.ajax results?

我在移动Safari iOS 6中遇到了通过AJAX设置的会话变量的问题。我提供了一个示例,它将设置会话变量,重定向到另一个页面,放弃会话并重新开始。 这前两次工作正常。 在第三次通过该过程时,会话变量丢失。 问题只发生在iOS 6 safari中。 它适用于我尝试过的所有其他浏览器。

该样本包含3页。 Page1设置会话变量并重定向到第2页.Page 2显示会话变量。 第3页放弃了会话变量。

第1页HTML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
   
</head>
<body>
    <form id="form1" runat="server">
       
            <Scripts>
               
            </Scripts>
        </asp:ScriptManager>
        Set session variable and redirect to page 2
    </form>
</body>
</html>

第1页Javascript:

1
2
3
4
5
6
7
function setSessionVariable() {
    PageMethods.SetSessionVariable(displaySetSessionVariable);
}

function displaySetSessionVariable(bReturn) {
    window.location ="Page2.aspx";
}

第1页代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System.Web.Services;

namespace SafariSessionProblem {
    public partial class Page1 : System.Web.UI.Page {
        protected void Page_Load(object sender, EventArgs e) {

        }

        [WebMethod]
        public static Boolean SetSessionVariable() {
            System.Web.HttpContext.Current.Session["TestVariable"] = 1;
            return true;
        }
    }

}

第2页HTML:

1
2
3
4
5
6
7
8
9
10
11
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
   
</head>
<body>
    <form id="form1" runat="server">
        </asp:Label><br /><br />
        Redirect to page 3 and abondon session
    </form>
</body>
</html>

代码:

1
2
3
4
5
6
7
namespace SafariSessionProblem {
    public partial class Page2 : System.Web.UI.Page {
        protected void Page_Load(object sender, EventArgs e) {
            lbl.Text = Session["TestVariable"].ToString();
        }
    }
}

第3页HTML:

1
2
3
4
5
6
7
8
9
10
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
   
</head>
<body>
    <form id="form1" runat="server">
        Start over
    </form>
</body>
</html>

代码:

1
2
3
4
5
6
7
namespace SafariSessionProblem {
    public partial class Page3 : System.Web.UI.Page {
        protected void Page_Load(object sender, EventArgs e) {
            Session.Abandon();
        }
    }
}


我已经找到了问题,因为在IOS6中Safari缓存了ajax请求和响应,因此在向服务器发送请求时它使用了缓存请求。 为了解决这个问题,只需将时间戳添加到Ajax请求中,它就能正常工作。 我已经放置了我用过的代码,在此帮助下更新了代码。 希望对你有所帮助。

这是克服此问题的新变量parameters.timeStamp = new Date()。getTime();

1
2
3
4
5
6
7
8
9
10
11
12
    parameters.qString = location.hash;
parameters.timeStamp = new Date().getTime();//this new line for safari issue

application.ajax({
    url: application.ajaxUrl +"ajax",
    type:"post",
    dataType:"json",
    data: $.extend({method:parameters.method}, parameters),
    success: function( response ){
        stop_spinner();
            })
        });

谢谢