Mojolicious会话不会过期

Mojolicious会话不会过期,第1张

概述我正在使用mojolicious构建一个Web应用程序.注销功能仅在本地计算机上运行应用程序时有效.当我尝试注销服务器上运行的应用程序时,会话不会过期,我仍然保持登录状态. 当我们通过POST请求更改注销而不是get时,就会发生这种情况. 我们调用logout的方式是来自前端的AJAX调用: function do_logout() { $.post( "<%= url_for('on_lo 我正在使用mojolic@R_301_6928@s构建一个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 routesmy $if_login = $r->under('/')->to('user#is_logged_in');$if_login->post('/logout')->name('on_logout')->to('user#on_logout');# Controller functionssub 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>

谢谢你的帮助!

总结

以上是内存溢出为你收集整理的Mojolicious会话不会过期全部内容,希望文章能够帮你解决Mojolicious会话不会过期所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1271310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存