我有这样的laravel控制器:
public function postSessionTopic() {
$article_id = Input::get('article_id', 0);
$comment_id = Input::get('comment_id', 0);
\Session::set('page_topic_id', $article_id);
\Session::set('page_comment_id', $comment_id);
\\comment - I have tried \Session::put too, but that doesn't change anything
}
当用户点击文章时,我会使用它。我在这个控制器中打印出我的会话变量,一切看起来都很好。但之后我刷新了我的页面,在那里我从会话中读取值,有时它会加载旧值或者不加载任何内容。我无法理解为什么,因为在控制器中我可以看到,保存了正确的值!
在我的页面中,我得到了这样的价值:
\Session::get('page_topic_id', 0)
答案 0 :(得分:0)
可能你做错了什么。您应该确保在两种情况下都使用完全相同的域(使用或不使用www)。
在此控制器中,如果您没有任何输入,则设置为会话变量0
。如果您在没有任何输入时启动此方法,这也可能是一个问题。
您可以尝试添加此基本路线:
Route::get('/session', function() {
$page_topic = Session::get('page_topic_id', 1);
$page_comment = Session::get('page_comment_id', 1);
echo $page_topic.' '.$page_comment.'<br />';
$article_id = $page_topic * 2;
$comment_id = $page_comment * 3;
Session::set('page_topic_id', $article_id);
Session::set('page_comment_id', $comment_id);
});
正如您所看到的那样完美(但您需要在尝试使用此路径之前删除会话Cookie)。
你得到了
1 1
2 3
4 9
8 27
等等。一切都如预期的那样
答案 1 :(得分:0)
答案是 - 一次两个阿贾克斯。如果您在会话中存储某些内容,请不要这样做。
答案 2 :(得分:0)
Laravel中的会话不会将更改视为永久更改,除非您生成响应(这是使用symphony作为其基础的结果)。因此,请确保您的app-&gt; run()正确结束并在刷新之前返回响应。您的问题主要是由代码中某处的die()方法或PHP实例/ worker的意外退出引起的。
答案 3 :(得分:0)
这可能不是您的问题,但如果您将laravel会话存储在数据库中,则它们是该值的大小限制。 Laravel会话迁移有一个名为“payload”的字段,它是一种文本类型。如果超过该字段的限制,整个会话将被终止。当我在我的会话中动态添加json模型数据时,这发生在我身上。
Schema::create('sessions', function (Blueprint $table) {
$table->string('id')->unique();
$table->text('payload');
$table->integer('last_activity');
});