刷新时的会话变量

时间:2014-10-02 09:14:38

标签: session laravel laravel-4 controller

我有这样的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)

4 个答案:

答案 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');
    });

How much UTF-8 text fits in a MySQL "Text" field?