2011-08-21 138 views
0

我将如何创建一个包含查询字符串与当前页面CakePHP的页面上的登录链接,例如:domain.com/login/?back=/posts/This_is_a_post登录链接

和那么我将如何在login方法中使用此方法将用户BACK发送到此URL?

我已经试过这样:<?php echo $this->Html->link('Log in', array('controller'=>'users','action'=>'login','admin'=>false, '?'=> array('back'=>$this->here)), array('escape'=>false)); ?>

,但它这样做的URL /login?back=%2Fportfolio%2Fgt%2FCreatHive

我怎么得到它不改变/在URL

干杯

回答

0

做到这一点,最好的办法是在会话中访问的最后一个页面存储在某些时候,可能当页面加载到login动作或其他东西时。你为什么问?由于受到攻击可能会链接到您的网站,例如:yoursite.com/login?back=mysite.com/login,因此当用户登录时,您会将它们发送到我的网站,该网站与您的登录表单完全相同,并让他们再次登录。瞧,攻击者现在可以轻松地钓鱼您的用户信息。

有了会话,也不会有网址编码问题。就像这样在你的login行动:

$this->Session->set('back_to', $this->referer()); 

// Then if they have logged in: 
$backTo = $this->Session->read('back_to'); 
if($backTo) { 
    $this->redirect($back_to); 
} else { 
    $this->redirect($this->Auth->redirect()); 
} 
0

更新 - 尝试使用命名参数代替:

对于您的链接:

echo $this->Html->link('My Link', array('controller' => 'users', 'action' => 'login', 'url' => $url)); 

在用户登录:

function login(){ 
    if($this->Session->read('Auth.User')){ 
     $url = $this->params['named']['url'] 
     // encode/decode url 
     $this->redirect("$url"); 
    } 
} 

您可以随时使用进行urlencode()和urldecode()为$ url变量中。

您还需要确保你的表格也发送URL回到登录功能:

echo $this->Form->create('User', array('controller' => 'users', 'action' => 'login', 'url' => $url)); 
+0

您好我没有问如何创建一个登录表单。我问如何用查询字符串创建一个链接:) – Cameron

+0

对不起,误读了这个问题!希望它现在有所帮助! –

+0

我只是得到链接,但没有查询字符串? – Cameron