package Egg::Model::Session::Bind::Cookie;
#
# Masatoshi Mizuno E<lt>lusheE<64>cpan.orgE<gt>
#
# $Id: Cookie.pm 303 2008-03-05 07:47:05Z lushe $
#
use strict;
use warnings;

our $VERSION= '0.01';

sub _setup {
	my($class, $e)= @_;
	my $c= $class->config->{cookie} ||= {};
	$c->{path}    ||= '/';
	$c->{expires} ||= '+1d';
	$class->next::method($e);
}

sub get_bind_data {
	my $self= shift;
	$self->e->request->cookie_value
	   ($self->config->{cookie}{name} || shift) || (undef);
}
sub set_bind_data {
	my($self, $key, $id)= @_;
	my %cookie= %{$self->config->{cookie}};
	my $name  = $cookie{name} || $key;
	$self->e->response->cookie( $name => { %cookie, value=> $id } );
}

1;

__END__

=head1 NAME

Egg::Model::Session::Bind::Cookie - The client and the session are related by using Cookie.

=head1 SYNOPSIS

  package MyApp::Model::Session::MySession;
  ............
  .....
  
  __PACKAGE__->config(
   cookie    => {
     ........
     ...
     },
   );
  
  __PACKAGE__->startup qw/
     Bind::Cookie
     ........
     ...
     /;

=head1 DESCRIPTION

It is a component module to relate the client and the session by using Cookie.

It uses it specifying 'Bind::Cookie' for 'startup'.

This component can be used by the default of the module generated
with L<Egg::Helper::Model::Session>.

=head1 CONFIGURATION

It sets it to config of the session component module with 'cookie' key.

  __PACKAGE__->config(
   cookie => {
     name    => 'ss',
     path    => '/',
     domain  => 'mydomain.name',
     expires => '+M',
     secure  => 1,
    },
   );

As for a set item, all cookie method of L<Egg::Response> is passed.

=head1 METHODS

=head2 get_bind_data

Session ID is received and returned from Cookie of the client.

Config-E<gt>{paran_name} or cookie-E<gt>{cookie}{name} is used for the key to
the cookie.

This method is called from 'accept_session_id' of L<Egg::Model::Session::Manager::TieHash>.

=head2 set_bind_data

It is prepared to send the client Cookie.

This method is called from 'Close' method of L<Egg::Model::Session::Manager::TieHash>
 or 'output_session_id' method.

=head2 SEE ALSO

L<Egg::Release>,
L<Egg::Model::Session::Manager::TieHash>,
L<Egg::Response>,

=head2 AUTHOR

Masatoshi Mizuno E<lt>lusheE<64>cpan.orgE<gt>

=head2 COPYRIGHT AND LICENSE

Copyright (C) 2008 Bee Flag, Corp. E<lt>L<http://egg.bomcity.com/>E<gt>, All Rights Reserved.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.6 or,
at your option, any later version of Perl 5 you may have available.

=cut