Mojolicious会话不会过期
发布时间:2020-12-15 23:36:51 所属栏目:大数据 来源:网络整理
导读:我正在使用mojolicious构建一个Web应用程序.注销功能仅在本地计算机上运行应用程序时有效.当我尝试注销服务器上运行的应用程序时,会话不会过期,我仍然保持登录状态. 当我们通过POST请求更改注销而不是get时,就会发生这种情况. 我们调用logout的方式是来自前
我正在使用mojolicious构建一个Web应用程序.注销功能仅在本地计算机上运行应用程序时有效.当我尝试注销服务器上运行的应用程序时,会话不会过期,我仍然保持登录状态.
当我们通过POST请求更改注销而不是get时,就会发生这种情况. 我们调用logout的方式是来自前端的AJAX调用: function do_logout() { $.post( "<%= url_for('on_logout') %>",function() {}); } 退出路线: $if_login->post('/logout')->name('on_logout')->to('user#on_logout'); 注销控制器: sub on_logout { my $self = shift; $self->session(expires => 1); return $self->redirect_to('home'); } 将会话设置为过期的行被调用,但在重定向之后,会话仍包含登录的用户名. 解决方法
我们终于找到了错误,请求是使用了
<a href="" onclick="do_logout()"></a> 这基本上是一次做两个动作并创造一个竞争条件.这是相关的代码段 # Relevant routes my $if_login = $r->under('/')->to('user#is_logged_in'); $if_login->post('/logout')->name('on_logout')->to('user#on_logout'); # Controller functions sub on_logout { my $self = shift; $self->session(expires => 1); return $self->render(json => '{success: "true"}'); } sub is_logged_in { my $self = shift; say $self->session('username'); # Sometimes after on_logout this is still # defined and equal to the username. return 1 if($self->session('username')); $self->render( template => 'permission/not_logged_in',status => 403 ); return; } # Front end <a href="" onclick='do_logout();'> <%= l('Log out') %> </a> <script> function do_logout() { $.post( "<%= url_for('on_logout') %>",function() { }).fail(function() { alert( "error logging out" ); }).done(function( data ) { alert( "Data: " + data ); }).always(function() { alert( "finished" ); }); } </script> 谢谢你的帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |