嵌入iframe时,ie9和safari中的.NET Membership.GetUser()为null
本文关键字:GetUser Membership null NET 中的 iframe ie9 safari 嵌入 | 更新日期: 2023-09-27 18:29:23
好吧,我被难住了。以下是场景:我在一个远程站点的iframe中嵌入了一个.net 4.0 mvc3应用程序(剃须刀)。我有一个标准的会员安全提供商,只要我使用Chrome或Firefox,一切都很好。然而,当我使用ie9(在兼容模式下和非兼容模式下)和safari(只尝试了5.1.4)时,当我登录后试图访问另一个控制器中的Membership.GetUser()时,我会得到一个System.NullReferenceException。
因此,我在我的AccountController中成功登录,并在此处重定向到我的TravelController:
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
try
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
FormsService.SignIn(model.UserName, model.RememberMe);
log.Debug("User: " + model.UserName + " logged in.");
return RedirectToAction("Travel", "Travel");
}
}
}
catch(....
现在,应用程序重定向到TravelController,它执行以下操作:
public ActionResult Travel()
{
try
{
string userName = Membership.GetUser().UserName;
... code ...
}
catch(Exception ex)
{
throw;
}
}
因此,这一切在Chrome和Firefox中都很好,但当我尝试使用ie或safari运行相同的代码时,Membership对象为null。
我有一种感觉,它在某种程度上与iframe有关,但我现在对一切都持怀疑态度。如果我在iframe之外运行它;这意味着我直接调用它在所有浏览器中运行的url(我已经尝试过了)。
有什么想法吗?提前谢谢。
身份验证基于cookie。如果iframe中的第三方网站没有提供机器可读的隐私政策,则Internet Explorer不允许它们使用cookie。看见http://www.softwareprojects.com/resources/programming/t-how-to-get-internet-explorer-to-use-cookies-inside-1612.html和http://en.wikipedia.org/wiki/P3P详细信息。
所以你应该给网站添加一个合适的标题,它应该可以正常工作。
希望能有所帮助。