我使用Lumen(Laravel)微框架进行项目,我在会话方面遇到了一些麻烦。我现在只是测试实现,但我遇到的问题是,当我设置会话变量然后刷新页面时,不再设置变量。
在我的.env文件中,我有:
SESSION_DRIVER=cookie
而且我知道这是被拾取的,因为当我将其更改为memcached时会抛出错误(因为我没有设置memcached)。
我也启用了中间件:
$app->middleware([
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
]);
然后在我的控制器中我有:
<?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]);
}
}
加载页面时设置值:
string(13) "test@test.com"
但是当我注释掉设置变量的行,然后刷新页面时,值为NULL:
// $request->session()->put('email', 'test@test.com');
// $request->session()->save();
var_dump($request->session()->get('email'));
exit;
在浏览器中设置了一个Cookie,但它似乎不适用于会话变量:
laravel_session 2ecef0103418ca82d068ec6a6c6fbec388af9b9e localhost / 2015-06-22T14:59:29.856Z 55 ✓
编辑:如果我将SESSION_DRIVER设置为cookie,则实际设置了cookie - 无论我是否实际设置了会话变量。
我不确定我在哪里出错了,而且我找不到非常全面的文档。
由于
答案 0 :(得分:2)
由于您尝试使用cookie
会话存储,因此您也需要Cookie中间件。启用的中间件应为:
$app->middleware([
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
]);
在第一个示例中,您在创建会话后立即使用该会话,以便您能够恢复该值。但是,由于会话cookie本身未由代码设置,因此当您返回页面时,不会恢复任何会话。无论您是否使用cookie存储,始终会设置“laravel_session” cookie。我正在项目中使用file
存储,但仍然可以设置。
另外,AFAIK,行:
$request->session()->save();
是不必要的。
要启用会话,您必须取消注释其中的所有中间件
$app->middleware()
文件中的bootstrap/app.php
方法调用。