首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl Dancer会话Cookie

Perl Dancer会话Cookie
EN

Stack Overflow用户
提问于 2012-08-16 05:37:30
回答 1查看 1.9K关注 0票数 1

我刚开始使用Dancer::Session::Cookie,并且我遇到了一些我不希望看到的行为。我编写了一个简单的Perl Dancer应用程序来使用Authen:: simple ::ActiveDirectory进行身份验证。我的路线如下。

代码语言:javascript
复制
package auth;
use Dancer ':syntax';

our $VERSION = '0.1';

get '/' => sub {
    template 'index', {user => session->{user}};
};

hook 'before' => sub {
    if (! session('user') && request->path_info !~ m{^/login}) {
        var requested_path => request->path_info;
        request->path_info('/login');
    }
};

get '/login' => sub {
    # Display a login page; the original URL they requested is available as
    # vars->{requested_path}, so could be put in a hidden field in the form
    template 'login', { path => vars->{requested_path} };
};

post '/login' => sub {
    # Validate the username and password they supplied
    my $ad = Authen::Simple::ActiveDirectory->new( 
        host      => 'host',
        principal => 'example.com'
    );

    if ($ad->authenticate( params->{user}, params->{pass} )) {
        session user => params->{user};
        redirect params->{path} || '/';
    } else {
        redirect '/login?failed=1';
    }
};

get '/logout' => sub {
    session->destroy;
    redirect '/';
};

true;

我能够成功登录并创建会话。登录后,我的用户名被放在主页上,并且我有一个指向/logout路由的链接。当我单击该链接时,路由将被执行(我在调试器中确认了这一点),但我返回到主页时仍然显示我的用户名。我希望返回到登录页面,因为没有会话存在。你知道舞者为什么会这样吗?我是否误解了会话的工作原理?

EN

回答 1

Stack Overflow用户

发布于 2012-12-06 22:42:44

我以前没有使用过Dancer::Session::Cookie,但看起来destroy方法是不正确的-它只是从服务器端解析的散列中删除cookie条目,但这永远不会传递回浏览器。

在调用session->destroy的地方,尝试执行以下命令:

代码语言:javascript
复制
cookie session->session_name => '', expires => '-1 day';

这就是腰带和吊带的方法-它清空cookie并将过期时间设置为过去发生的时间。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11977731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档