2009-06-09 38 views
2

我在CakePHP项目的users_controller.php中有一个方法,用于通过WordPress站点上的AJAX调用远程登录用户。该方法在通过Firefox调用时完美无瑕,但是当我试图通过AJAX或直接从IE8或Safari中的浏览器调用它时,它将不会登录.Auth-> login()方法返回true,就好像一切都是好,但它不会登录。任何想法?CakePHP验证组件“登录”IE8 + Safari中的方法失败

function remoteLogin($key) 
{ 
    # this method should only be called via AJAX 
    $this->layout = 'ajax'; 

    $matching_key = '***'; 

    if($key == $matching_key) 
    { 
    # auto-login service account 
    $data['User']['username'] = '***'; 
    $data['User']['password'] = $this->Auth->password('***'); 

    $this->Auth->login($data); 
    } 
} 

注:我现在已经证实,这种方法不能在Opera工作,要么。我很困惑。

+1

什么,具体来说就是Firefox做的那个IE等不是?此功能完成后UI是否更新?另外,它听起来像是你用来调用这个函数而不是函数本身的JavaScript(如果只是因为这非常简单,PHP看起来很好)可能会有问题。请详细说明,以及相关的javascript会使这更容易诊断。 – inkedmn 2009-06-09 14:38:14

回答

0

您可能想要检查您的Cookie并确保它们按照您的预期通过。 Fiddler有助于查看http流量,因为它可以发现这些AJAX问题。

www.domain.com和domain.com是否会去同一个地方? 如果是这样,这可能与我跑过的CakePHP/IE问题有关。

删除任何域级cookie,看看它是否有效。

在IE浏览器中,任何域名cookie都会对子域cookie进行注册。所以,如果你有一个cookie去了domain.com,然后去www.domain.com,你可以重置你的会话登录,整天登出,但是IE会忽略www.domain.com cookies并继续使用原来的domain.com之一。我为旧版本的Cake写了一个补丁,它允许您设置/强制cookie作用域为domain.com,即使他们以www.domain.com的身份访问该网站以解决此问题。

0

现在不要关于IE8,但Safari确实会阻止跨域ajax,即使是在同一顶级域名下的“兄弟姐妹”之间。例如。您不能让app.example.com使用helppages.example.com中的ajax加载div。忘记cookie,我说的只是使用ajax加载的纯html。

0
  • 我认为问题是你的域名。 例如:IE或某些浏览器不工作,如果您的域:abc_def.com,...
  • 请检查您的域名,并改变它像abcdef.com =>它会没事