会话不会持久存在于Lumen PHP框架中

Dav*_*inn 7 php session laravel laravel-4 lumen

我正在使用Lumen(通过Laravel)微框架进行项目,我在会话方面遇到了一些麻烦.我现在只是测试实现,但我遇到的问题是,当我设置会话变量然后刷新页面时,不再设置变量.

在我的.env文件中,我有:

SESSION_DRIVER=cookie
Run Code Online (Sandbox Code Playgroud)

而且我知道这是被拾取的,因为当我将其更改为memcached时会抛出错误(因为我没有设置memcached).

我也启用了中间件:

$app->middleware([
    'Illuminate\Session\Middleware\StartSession',
    'Illuminate\View\Middleware\ShareErrorsFromSession',
]);
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中我有:

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class SessionController extends Controller
{
    public function index(Request $request)
    {
        $request->session()->put('email', 'test@test.com');
        $request->session()->save(); // Not sure if this is required

        var_dump($request->session()->get('email'));
        exit;

        return view('session.index', ['test' => $value]);
    }
}
Run Code Online (Sandbox Code Playgroud)

加载页面时设置该值:

string(13) "test@test.com"
Run Code Online (Sandbox Code Playgroud)

但是当我注释掉设置变量的行,然后我刷新页面时,值为NULL:

// $request->session()->put('email', 'test@test.com');
// $request->session()->save();

var_dump($request->session()->get('email'));
exit;
Run Code Online (Sandbox Code Playgroud)

在浏览器中设置了一个cookie,但它似乎不是会话变量:

laravel_session 2ecef0103418ca82d068ec6a6c6fbec388af9b9e    localhost   /   2015-06-22T14:59:29.856Z    55  ?
Run Code Online (Sandbox Code Playgroud)

编辑:如果我将SESSION_DRIVER设置为cookie,则实际设置了cookie - 无论我是否实际设置了会话变量.

我不确定我在哪里出错,而且我发现文档并不全面.

谢谢

jet*_*eon 2

由于您尝试使用cookie会话存储,因此您还需要 cookie 中间件。启用的中间件应该是:

$app->middleware([
    'Illuminate\Cookie\Middleware\EncryptCookies',
    'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
    'Illuminate\Session\Middleware\StartSession',
    'Illuminate\View\Middleware\ShareErrorsFromSession',
]);
Run Code Online (Sandbox Code Playgroud)

在第一个示例中,您在创建会话后立即使用会话,以便能够恢复该值。但是,由于会话cookie本身不是由代码设置的,因此当您返回页面时,不会恢复任何会话。无论您是否使用 cookie 存储,“laravel_session” cookie都会被设置。我正在file项目中使用存储,但它仍然被设置。

另外,据我所知,该行:

$request->session()->save();
Run Code Online (Sandbox Code Playgroud)

是不必要的。


文档指出

$app->middleware()要启用会话,您必须取消文件中方法调用中所有中间件的注释bootstrap/app.php