Laravel 3如何根据URL使用不同的会话设置

时间:2013-11-22 10:15:52

标签: php session laravel laravel-3

我使用laravel-3开发的网站有两个不同的部分:

  • 公开即可。哪个网址为/
  • 管理即可。哪个网址为/admin

在公共区域中,用户可以登录以访问其帐户,而在管理员中,只有具有所需权限的用户才能登录。

现在我无法将一个部分中使用的会话与另一个部分中使用的会话区分开来,因为它们都使用相同的session配置参数,因此允许登录公共部分的任何人进入管理区域。

我一直在考虑为admin部分定义一个环境,并为cookiepath定义不同的值:

$environments = array(
// Local
   'admin' => array('http://localhost*/admin'),  // To handle anything inside section "admin"
   'local' => array('http://localhost*'),        // To handle everything else
);

但由于Request::detect_env()仅使用网址根检查这些规则,因此永远不会看到admin环境(laravel/core.php:183)

$root = Request::foundation()->getRootUrl();
$environment = Request::detect_env($environments, $root);

1 个答案:

答案 0 :(得分:1)

我建议不要使用环境来解决这个问题,而是使用带通配符的过滤器来委派验证:

Route::when('admin/*', 'login_admin_filter');

但如果你真的想要使用环境,我理解这样的文档:

在你的开始文件中你应该使用一个闭包:

$env = $app->detectEnvironment(function(){
    // This condition need to fail if the user isn't an administrator
    if($_SESSION['anything'] == 'admin' OR $every_thing_else){
        return 'admin';        
    } else {
        return 'production';
});