Cakephp 当前页面的登录链接作为查询字符串传递,然后使用它将用户发回

Cakephp 当前页面的登录链接作为查询字符串传递,然后使用它将用户发回,cakephp,Cakephp,如何在CakePHP页面上创建一个登录链接,该页面包含当前页面的查询字符串,例如:domain.com/login/?back=/posts/This\u is\u post 那么,我如何在登录方法中使用它来将用户发送回这个url呢 我试过这个: 但它在url/登录名上执行此操作?返回=%2Fportfolio%2Fgt%2FCreatHive 如何使其不更改URL中的/ Cheers更新-尝试改用命名参数: 有关您的链接: echo $this->Html->link('My Li

如何在CakePHP页面上创建一个登录链接,该页面包含当前页面的查询字符串,例如:domain.com/login/?back=/posts/This\u is\u post

那么,我如何在登录方法中使用它来将用户发送回这个url呢

我试过这个:

但它在url/登录名上执行此操作?返回=%2Fportfolio%2Fgt%2FCreatHive

如何使其不更改URL中的/


Cheers

更新-尝试改用命名参数:

有关您的链接:

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");
    }
}
对于$url变量,始终可以使用urlencode和URDECODE

您还需要确保表单也将URL发送回登录函数:

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

最好的方法是在某个时刻存储会话中访问的最后一个页面,可能是在登录操作中加载该页面时。你为什么问?因为被攻击的人可能会链接到你的网站,例如:yoursite.com/login?back=mysite.com/login,因此当用户登录时,你会将他们发送到我的网站,这与你的登录表单完全相同,并让他们再次登录。瞧,攻击者现在可以轻松地仿冒您的用户信息

对于会话,也不会有url编码问题。在您的登录操作中如下所示:


嗨,我没有问如何创建登录表单。我问如何创建一个带有查询字符串的链接:我只得到了链接,没有查询字符串?只是选中了-除了登录帖子数据之外,你不能向登录方法传递任何东西。因此,请尝试改用$this->params['named'],这样我就不能在登录方法中使用查询字符串了吗?我刚刚尝试过-如果您创建了如上所述的链接,您可以在登录操作中使用$this->params['named']['url']访问您的url。请记住,您还必须将表单操作设置为链接。
$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());
}