【问题标题】:Session variable on refresh刷新时的会话变量
【发布时间】:2014-11-27 06:16:03
【问题描述】:

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

【问题讨论】:

  • 检查您的会话 cookie 域,例如,如果您的 cookie 保存到 www.example.org 并且您访问 example.loc,您将不会在两者中访问相同的会话
  • 域总是相同的

标签: session laravel laravel-4 controller


【解决方案1】:

这可能不是您的问题,但如果您将 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?

【讨论】:

    【解决方案2】:

    Laravel 中的会话不会将更改视为永久更改,除非您生成响应(这是使用 symphony 作为基础的结果)。因此,请确保您的 app->run() 正确结束并在刷新之前返回响应。您的问题主要是由代码中某处的 die() 方法或 PHP 实例/worker 的意外退出引起的。

    【讨论】:

      【解决方案3】:

      答案是 - 一次有两个 ajax。如果您在会话中存储某些内容,请不要这样做。

      【讨论】:

        【解决方案4】:

        你可能做错了什么。您应该确保在这两种情况下都使用完全相同的域(带或不带 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
        

        等等。一切如预期

        【讨论】:

        • 你是如何测试它的?您需要手动刷新此 URL,例如 http://localhost/project/session 并获得值。你得到了什么价值观?
        猜你喜欢
        • 2015-07-02
        • 2014-05-15
        • 2022-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-16
        • 2015-12-18
        • 1970-01-01
        相关资源
        最近更新 更多