Php 会话过期后Laravel重定向不工作

Php 会话过期后Laravel重定向不工作,php,session,redirect,laravel,login,Php,Session,Redirect,Laravel,Login,当前,如果我在我的webapp中空闲足够长的时间,我的会话将过期。再次交互时,我会收到一个错误屏幕,通知我会话超时,而不是将我重定向到主页 在我的routes.php文件中,我使用以下内容: Route::filter('authenticate', function() { if ( !Session::has('user') && Session::get('user')->id ) { // return true if user not logged

当前,如果我在我的webapp中空闲足够长的时间,我的会话将过期。再次交互时,我会收到一个错误屏幕,通知我会话超时,而不是将我重定向到主页

在我的routes.php文件中,我使用以下内容:

Route::filter('authenticate', function() {
    if ( !Session::has('user') && Session::get('user')->id ) { // return true if user not logged
        return Redirect::to('/');
    }
});

我的逻辑错了吗?

你的表达式永远不会为真。你基本上是用英语说的:

如果密钥为“User”的会话中没有值,并且密钥为“User”的会话值具有id,则执行

有一个会话值的键是否为
'User'
,但不能同时拥有它。我想你应该这样说:

if ( !Session::has('user') || !Session::get('user')->id )
这将在两种情况下执行重定向:

  • 当“用户”键下没有会话值时,或
  • 当“用户”会话值中的值的id参数计算为false时

  • 出于某种原因,您的解决方案在登录时一直在重定向,但它只适用于(!Session::has('user')),如果用户键中的条目在
    id
    属性中没有计算为true的值,则该选项是有意义的