会话在Laravel 4中不起作用

时间:2014-07-23 10:20:45

标签: php session laravel-4

我遇到了一个不会持久的会话问题。

在控制器中,我有一个加载文章进行编辑的功能

public function getEdit($id)
{
    try {
        $news = News::findOrFail($id);
        View::share('title', Lang::get('admin.editNews').": ".$news->title);
        View::share('news', $news);
        $this->layout->content = View::make('news.editNews');
    } catch (Exception $e) {
        Session::flash('message', Lang::get('admin.noSuchNews'));
        Session::flash('notif', 'danger');
        return Redirect::to("news");
    }
}

我还有另一个函数 - 索引,它应该显示这些flash消息。

public function getIndex()
{
    var_dump(Session::get('message'));
}

会话不会持续存在。不使用Session::flash,不使用Session::put

Session::get('message')只是null

我想我应该提一下,我做了这样的应用程序路由:

Route::controller('news', 'NewsController');

6 个答案:

答案 0 :(得分:5)

检查控制器中Session的功能设置的返回状态。确保即使它是一个简单的null也会返回一些东西。

我刚刚遇到了同样的问题,这解决了它。我能够使用以下内容:

Route::get('session', function (){
    Session::put('current_user', 'Lionel Morrison');
    Session::put('user_id', '12345');

    var_dump(Session::all());
});

Route::get('get', function () {
    var_dump(Session::all());
});

但是当我在控制器中使用它时,它在我返回null之前没有工作;

public function setsession() {
    Session::put('cat', 'Tom');
    Session::put('mouse', 'Jerry');

    return null;
}

public function getsession() {
    dd(Session::all());
}

答案 1 :(得分:3)

好的,我已修好了。

事情是,我已将session.php文件放入此

'domain' => '.mydomain.com',

但是由于app仍然在localhost中,即使我没有使用cookie作为我的Session驱动程序,所有会话都失败了。

当我将其更改为

'domain' => '',

一切都开始了

答案 2 :(得分:2)

如果您发现会话未正确保存,请尝试明确调用Session::save()以强制保存。

答案 3 :(得分:0)

您可能需要查看http://laravel.com/docs/session#session-drivers中描述的会话设置。

最简单的方法是使用Cookie进行会话(并确保在您的浏览器中启用了Cookie)。

如果您使用file存储会话,请确保app/config/session.php中定义的存储路径是可写的。

答案 4 :(得分:0)

如果您尝试使用“Auth :: loginUsingId()”api而不是“Auth :: attempt()”api进行登录,则会破坏另一个请求的会话。所以我建议你使用“cookie”驱动程序而不是session.php的“file”(config \ session.php \ driver)

答案 5 :(得分:0)

for laravel 4.2

转到app / config目录

编辑app.php

'url' => 'localhost',

编辑session.php

'driver' => 'file',
'cookie' => 'sitename_session',
'domain' => null,
'secure' => false,