相关疑难解决方法(0)

Cookie已阻止/未保存在Internet Explorer的IFRAME中

我有两个网站,让我们说他们是example.comanotherexample.net.上anotherexample.net/page.html,我有一个IFRAME SRC="http://example.com/someform.asp".IFRAME显示用户填写并提交的表单http://example.com/process.asp.当我someform.asp在自己的浏览器窗口中打开表单(" ")时,一切正常.但是,当我someform.asp在IE 6或IE 7中作为IFRAME 加载时,example.com的cookie不会保存.在Firefox中,此问题不会出现.

出于测试目的,我在http://newmoon.wz.cz/test/page.php上创建了类似的设置.

example.com使用基于cookie的会话(我无能为力),所以没有cookie,process.asp就不会执行.如何强制IE保存这些cookie?

嗅探HTTP流量的结果:在GET /someform.asp响应中,有一个有效的每会话Set-Cookie头(例如Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY),但在POST /process.asp请求中,根本没有Cookie头.

Edit3:一些AJAX +服务器端脚本显然能够回避这个问题,但这看起来非常像一个bug,而且还会打开一组全新的安全漏洞.我不希望我的应用程序使用bug +安全漏洞的组合只是因为它很容易.

编辑:P3P政策是根本原因,下面有完整的解释.

cookies internet-explorer privacy p3p

391
推荐指数
8
解决办法
22万
查看次数

为什么我在IE 9中丢失了关于Ajax请求的cookie和会话

会话cookie在Chrome和Firefox中运行良好,但是对于IE9和AJAX请求,我丢失了所有会话cookie.

直接请求查看

  public class AddressController : Controller
  {
    [MvcSiteMapNode(Title = "Addresses", ParentKey = "MyAccount", Key = "Addresses")]
     public ActionResult Index()
     {
        ....
         var memberId = GetKeyValues.GetMemberId(); // This works perfect.
        ...
      }
Run Code Online (Sandbox Code Playgroud)

Ajax调用

   $.ajax({
        url: "/Address/CheckPrimaryAddressGood?t="+ Math.random(),
        type: "Get",
        success: function(data) {
         ...

public class AddressController : Controller
{
    public ActionResult CheckPrimaryAddressGood()
        {
           ...
           var memberId = GetKeyValues.GetMemberId();
           ...
       }
 }
 public static class GetKeyValues
 {
    public static string GetMemberId()
    {
         if (HttpContext.Current.Session[keyCookie] != null)
            {
                memberId = GetMemberIdFromSession();
            } …
Run Code Online (Sandbox Code Playgroud)

cookies ajax asp.net-mvc jquery asp.net-mvc-4

13
推荐指数
2
解决办法
2196
查看次数

为什么Rails无法在Internet Explorer的Ajax请求中访问会话?

我在sessions_helper中有以下代码:

 def current_user
   @current_user ||= User.find_by_remember_token(cookies[:remember_token])
 end
Run Code Online (Sandbox Code Playgroud)

这让我从任何控制器调用current_user来获取当前用户.(我从头开始使用类似于RailstutorialRailscasts的身份验证).

我调用lookup_result了ajax请求,检查服务器以查看特定结果是否准备就绪.

 $.get("/lookup_result?id=<%=id%>");
Run Code Online (Sandbox Code Playgroud)

它转到以下控制器方法:

def lookup result
  user = current_user 
  # do things with user...
end
Run Code Online (Sandbox Code Playgroud)

这通常可以正常工作,但有时Rails无法获取current_user.我怀疑问题是cookie或CSRF令牌在某些情况下无法通过ajax请求传递,但为什么它通常有效?我该如何修复它以便始终有效?

更新:
我不知道如何复制错误.只有已登录的用户才能访问发送该请求的页面(尽管有人可以将ajax请求复制到另一个未登录的浏览器中).我用rollbar报告错误并保存请求数据.

当current_user失败时,这是user-agent的常用数据:

Mozilla/4.0(兼容; MSIE 7.0; Windows NT 5.1; InfoPath.1; ...)

这意味着Internet Explorer通过Ajax发送会话信息存在一些问题.有人知道怎么修这个东西吗?

下面你可以看到它返回的所有数据类别,尽管它对于任何带有"session"的东西都是空的.

时间戳
message.request_data.headers.Accept
message.request_data.headers.Accept-Encoding
message.request_data.headers.Accept-Language
message.request_data.headers.Cf-Connecting-Ip //(CF代表cloudflare)
message.request_data.headers .Cf-Ipcountry
message.request_data.headers.Cf-Ray
message.request_data.headers.Cf-Visitor
message.request_data.headers.Connection
message.request_data.headers.Host
message.request_data.headers.User-Agent
message.request_data.headers .Version
message.request_data.headers.X-Forwarded-For
message.request_data.headers.X-Forwarded-Port
message.request_data.headers.X-Forwarded-Proto
message.request_data.headers.X-Request-Start
message.request_data.方法
message.request_data.params .... //(显示各种参数)
...
message.request_data.session.defer //(所有这些会话项都为空)
message.request_data.session.domain
message.request_data.session .expire_after
message.request_data.session.httponly
message.request_data.session.id
message.request _data.session.path
message.request_data.session.renew
message.request_data.session.secret
message.request_data.session.secure …

ajax jquery ruby-on-rails session-cookies ruby-on-rails-3

5
推荐指数
1
解决办法
821
查看次数