Session variable on refresh

我的梦境 提交于 2019-12-11 10:49:45

问题


I have laravel controller like this:

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


}

I use it, when user click on a article. I print_r out my session variable in this controller and everything looks fine. But after that I refresh my page, and there I read value from session, and sometimes it load old value or doesn't load anything. I can't understand why, because in controller i can see, that correct value is saved!

In my page, i get that value like this:

\Session::get('page_topic_id', 0)

回答1:


Probably you do something wrong. You should make sure that in both cases you uses exactly same domain (with or without www).

In this controller when you don't have any input you set to session variables 0. This can also be an issue if you launch this method when you don't have any input.

You could try with adding this basic route:

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);
});

As you see it's working perfectly (but you need to remove session cookie before trying with this path).

You get

1 1 
2 3
4 9
8 27

and so on. Everything as expected




回答2:


Answer was - two ajax at one time. Don't do that, if you store something in session.




回答3:


The session in Laravel doesn't consider changes permanent unless you generate a response (and that's the result of using symphony as it's base). So make sure your app->run() ends properly and returns a response before refreshing. Your problem is mostly caused by a die() method somewhere along your code or an unexpected exit of PHP instance/worker.




回答4:


This is probably not your issue but if you are storing your laravel session in the database their is a limit on how large that value can be. The Laravel session migration has a field called "payload" that is a text type. If you exceed the limit on that field the entire session gets killed off. This was happening to me as I was dynamically adding json model data to my session.

    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?



来源:https://stackoverflow.com/questions/26157756/session-variable-on-refresh

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!