Session Laravel 5:课程没有按应有的方式进行
在我使用的每个控制器和routes.php之上:Session Laravel 5:课程没有按应有的方式进行,session,laravel,laravel-5,Session,Laravel,Laravel 5,在我使用的每个控制器和routes.php之上: use Illuminate\Support\Facades\Session; 在routes.php中,我使用以下方法设置会话: Session::put('key', 'value'); 在控制器中,我想使用以下方法调用键的会话值: echo Session::get('key'); 但是,一旦我在routes.php中将一个新值设置为key,并在控制器中调用它,我仍然会得到第一个值,而不是新值。如果在设置后使用routes.php中的
use Illuminate\Support\Facades\Session;
在routes.php中,我使用以下方法设置会话:
Session::put('key', 'value');
在控制器中,我想使用以下方法调用键的会话值
:
echo Session::get('key');
但是,一旦我在routes.php中将一个新值设置为key
,并在控制器中调用它,我仍然会得到第一个值,而不是新值。如果在设置后使用routes.php中的session::all()
回显会话,我会看到新值,但在控制器中它会翻转回第一个值。在设置新值之前,我甚至尝试在routes.php中使用以下命令,但没有成功
Session::forget('key');
我忘了什么吗
使用常规PHP$\u SESSION
my routes.PHP如下所示:
$slug = $_SERVER['REQUEST_URI'];
$slug = explode('/', $slug[0]);
if(in_array($slug[1], Language::all()->lists('iso'))) {
$_SESSION['language'] = $slug[1];
if(!$slug[2]) {
$_SESSION['slug'] = 'home';
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page']);
} else {
if($slug[2] != 'dashboard' && $slug[2] != 'migrate' && $slug[2] != 'form-send') {
if (in_array($slug[2], ElementValue::where('element_field_id', 2)->lists('value_char')) && !isset($slug[3])) {
$_SESSION['slug'] = $slug[2];
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page']);
} else {
$_SESSION['slug'] = 'home';
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page']);
}
}
}
}
Session::put('key', 'value');
Route::get('my-route', 'MyController@doSomething');
在routes.php
中的何处设置会话值?听起来你在做这样的事情:
$slug = $_SERVER['REQUEST_URI'];
$slug = explode('/', $slug[0]);
if(in_array($slug[1], Language::all()->lists('iso'))) {
$_SESSION['language'] = $slug[1];
if(!$slug[2]) {
$_SESSION['slug'] = 'home';
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page']);
} else {
if($slug[2] != 'dashboard' && $slug[2] != 'migrate' && $slug[2] != 'form-send') {
if (in_array($slug[2], ElementValue::where('element_field_id', 2)->lists('value_char')) && !isset($slug[3])) {
$_SESSION['slug'] = $slug[2];
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page']);
} else {
$_SESSION['slug'] = 'home';
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page']);
}
}
}
}
Session::put('key', 'value');
Route::get('my-route', 'MyController@doSomething');
然后这样做:
class MyController {
public function doSomething()
{
Session::get('key');
}
}
对吗?如果是这样,请继续阅读
我不是Laravel请求生命周期方面的专家(更多信息,请参见),但这不起作用并不奇怪。我的想法是这样的:routes.php
文件在生命周期的早期加载并执行,可能是第一个,因为它告诉应用程序下一步要执行什么代码(即,当收到特定请求时该做什么)。当我说“生命周期的早期”时,我指的是早期,就像会话初始化之前一样。我认为,Session::put
调用只是被忽略了,因为在设置值时,会话并不存在
你可能想用更多的细节来扩展你的问题,比如你想完成什么——必须有更好的方法来完成
编辑-回应以下评论
我不是说你应该触摸$\u SESSION
超全局-这是个坏主意,因为我甚至不确定Laravel是否使用本机PHP SESSION工具,而且你也不能保证你所做的任何事情将来都会继续工作
不清楚您想做什么,但对我来说,这听起来像是一个不属于会话的值
通过将Session::put
放在routes.php
文件中,听起来您有一些重要的值,应该为每个会话和每个请求设置这些值
如果是这样的话,它是一个静态值,那么它不是会话值,而是一个配置值
相反,如果它是一个动态值和/或根据与会话关联的用户而变化,则可以在以下几个位置之一设置它:
Route::get('some/route', function () {
Session::put('key', 'value');
// this works, because the closure isn't executed until after
// the application is initialized
});
路由中的何处。php
您正在设置会话值吗?听起来你在做这样的事情:
$slug = $_SERVER['REQUEST_URI'];
$slug = explode('/', $slug[0]);
if(in_array($slug[1], Language::all()->lists('iso'))) {
$_SESSION['language'] = $slug[1];
if(!$slug[2]) {
$_SESSION['slug'] = 'home';
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page']);
} else {
if($slug[2] != 'dashboard' && $slug[2] != 'migrate' && $slug[2] != 'form-send') {
if (in_array($slug[2], ElementValue::where('element_field_id', 2)->lists('value_char')) && !isset($slug[3])) {
$_SESSION['slug'] = $slug[2];
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page']);
} else {
$_SESSION['slug'] = 'home';
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page']);
}
}
}
}
Session::put('key', 'value');
Route::get('my-route', 'MyController@doSomething');
然后这样做:
class MyController {
public function doSomething()
{
Session::get('key');
}
}
对吗?如果是这样,请继续阅读
我不是Laravel请求生命周期方面的专家(更多信息,请参见),但这不起作用并不奇怪。我的想法是这样的:routes.php
文件在生命周期的早期加载并执行,可能是第一个,因为它告诉应用程序下一步要执行什么代码(即,当收到特定请求时该做什么)。当我说“生命周期的早期”时,我指的是早期,就像会话初始化之前一样。我认为,Session::put
调用只是被忽略了,因为在设置值时,会话并不存在
你可能想用更多的细节来扩展你的问题,比如你想完成什么——必须有更好的方法来完成
编辑-回应以下评论
我不是说你应该触摸$\u SESSION
超全局-这是个坏主意,因为我甚至不确定Laravel是否使用本机PHP SESSION工具,而且你也不能保证你所做的任何事情将来都会继续工作
不清楚您想做什么,但对我来说,这听起来像是一个不属于会话的值
通过将Session::put
放在routes.php
文件中,听起来您有一些重要的值,应该为每个会话和每个请求设置这些值
如果是这样的话,它是一个静态值,那么它不是会话值,而是一个配置值
相反,如果它是一个动态值和/或根据与会话关联的用户而变化,则可以在以下几个位置之一设置它:
Route::get('some/route', function () {
Session::put('key', 'value');
// this works, because the closure isn't executed until after
// the application is initialized
});
最好的选择可能是中间件-这将允许您在代码中的一个位置设置(或计算)会话值,如果您不需要将其用于所有路由,还可以将其与特定路由相关联。不要在laravel中使用
$\u session
。使用