Revision 254
- Date:
- 2012/09/26 16:44:59
- Files:
Legend:
- Added
- Removed
- Modified
-
utf8/plugins/session/config.proto
6 6 ############################################################################# 7 7 8 8 PLUGINS += session 9 PROJECT_REQUIRED += Apache-Session 9 PROJECT_REQUIRED += Apache-Session Apache-Session-Memcached 10 10 PROJECT_REQUIRED += JSON-XS 11 11 PROJECT_REQUIRED += P-WebFetcher 12 12 … … 32 32 33 33 REWRITE += SESSION_STORAGE SESSION_DOMAIN SESSION_LIFETIME SESSION_EXPIRES 34 34 35 ######################################################################## 35 ########################################################################### 36 36 # 37 37 # SESSION_DOMAIN 38 38 # Домен, на котором отвечает проект. Можно не указывать 39 39 # SESSION_STORAGE 40 # Контейнер для хранения сессий. Варианты: POSTGRES и FILE 40 # Контейнер для хранения сессий. Варианты: POSTGRES, MEMCACHED, FILE 41 # Для работы сессий через Memcached в конфиге проекта или инсталляции 42 # должны быть установлены параметры 43 # MEMCACHED_ENABLE = 1 44 # MEMCACHED_SERVERS = список серверов с портами, разделенный пробелами 41 45 # SESSION_LIFETIME 42 46 # Время жизни сессий до автоочистки. Задается в часах, используется 43 47 # при включении в crontab проекта скрипта из services 44 48 # SESSION_EXPIRES 45 49 # Время жизни куки сессии. Задается в формате Apache 46 50 # 47 ######################################################################## 51 ########################################################################### 48 52 49 53 50 54 ### AUTH::FaceBook … … 90 94 GOOGLE_SCOPE = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email 91 95 REWRITE += GOOGLE_SCOPE 92 96 97 93 98 CONNECTION_TIMEOUT = 3 94 95 96 99 PROJECT_REQUIRED += Crypt-SSLeay -
utf8/plugins/session/lib/session/Keeper.pm
7 7 use Apache::Cookie; 8 8 use Apache::Session::File; 9 9 use Apache::Session::Postgres; 10 use Apache::Session::Memcached; 10 11 use Contenido::Globals; 11 12 use Data::Dumper; 12 13 … … 99 100 ); 100 101 my ($type_prop) = grep { $_->{attr} eq 'type' } $profile->structure; 101 102 $data{type} = $profile->type if $type_prop; 103 my ($ava_prop) = grep { $_->{attr} eq 'avatar' } $profile->structure; 104 if ( $ava_prop ) { 105 my $avatar = $profile->get_image('avatar'); 106 $data{avatar} = $avatar->{mini}{filename} if ref $avatar && exists $avatar->{filename}; 107 } 102 108 $self->store_value ( %data ); 103 109 return $self->get_session(); 104 110 } … … 230 236 Handle => $keeper->SQL, 231 237 }; 232 238 }; 239 } elsif ( $state->{session}->storage eq 'MEMCACHED' ) { 240 eval { 241 tie %session, 'Apache::Session::Memcached', $sid, { 242 Handler => $keeper->{session}->MEMD, 243 Expiration => $state->{session}->{lifetime}, 244 }; 245 }; 233 246 } else { 234 247 eval { 235 248 tie %session, 'Apache::Session::File', $sid, { 236 Directory => $state->session->session_dir, 249 Directory => $state->{session}->session_dir, 237 250 }; 238 251 }; 239 252 } … … 256 269 Handle => $keeper->SQL, 257 270 }; 258 271 }; 272 } elsif ( $state->{session}->storage eq 'MEMCACHED' ) { 273 eval { 274 tie %session, 'Apache::Session::Memcached', undef, { 275 Handler => $keeper->{session}->MEMD, 276 Expiration => $state->{session}->{lifetime}, 277 }; 278 }; 259 279 } else { 260 280 eval { 261 281 tie %session, 'Apache::Session::File', undef, { 262 Directory => $state->session->session_dir, 282 Directory => $state->{session}->session_dir, 263 283 }; 264 284 }; 265 285 } -
utf8/plugins/session/lib/session/State.pm.proto
11 11 my $self = {}; 12 12 bless $self, $class; 13 13 14 # configured 15 $self->{project} = '@PROJECT@'; 16 $self->{debug} = (lc('@DEBUG@') eq 'yes'); 17 $self->{project_name} = '@PROJECT_NAME@'; 18 $self->{default_expire} = '@DEFAULT_EXPIRE@' || 300; 19 $self->{default_object_expire} = '@DEFAULT_OBJECT_EXPIRE@' || 600; 20 14 21 # зашитая конфигурация плагина 15 22 $self->{db_type} = 'none'; 16 23 $self->{storage} = '@SESSION_STORAGE@' || 'FILE'; ## Значения: FILE POSTGRES MEMCACHED … … 36 43 $self->{images_directory} = ''; 37 44 $self->{binary_directory} = ''; 38 45 $self->{preview} = ''; 39 $self->{debug} = ''; 40 46 $self->{store_method} = ''; 41 47 $self->{cascade} = ''; 42 $self->{memcached_enable} = ''; 43 48 49 $self->{memcached_enable} = lc( '@MEMCACHED_ENABLE@' ) eq 'yes' ? 1 : 0; 50 $self->{memcached_backend} = '@MEMCACHED_BACKEND@'; 51 $self->{memcached_select_timeout} = '@MEMCACHED_SELECT_TIMEOUT@' || 0.2; 52 $self->{memcached_servers} = [qw(@MEMCACHED_SERVERS@)]; 53 $self->{memcached_enable_compress} = lc( '@MEMCACHED_ENABLE_COMPRESS@' ) eq 'yes' ? 1 : 0; 54 $self->{memcached_delayed} = lc('@MEMCACHED_DELAYED@') eq 'yes' ? 1 : 0; 55 $self->{memcached_set_mode} = lc('@MEMCACHED_SET_MODE@') eq 'add' ? 'add' : 'set'; 56 $self->{memcached_busy_lock} = 60; 57 $self->{memcached_namespace} = lc( $self->{'project'} ).'|plugin_session|'; 58 59 $self->{memcached_object_expire} = undef; 60 61 $self->{storage} = 'FILE' if $self->{storage} eq 'MEMCACHED' && !$self->{memcached_enable}; 62 44 63 $self->{facebook_app_id} = '@FACEBOOK_APP_ID@'; 45 64 $self->{facebook_app_secret} = '@FACEBOOK_APP_SECRET@'; 46 65 $self->{facebook_redirect_uri} = '@FACEBOOK_REDIRECT_URL@'; … … 96 115 db_name 97 116 db_user 98 117 db_password 99 data_directory images_directory binary_directory preview debug store_method cascade memcached_enable 118 119 memcached_enable 120 memcached_servers 121 memcached_select_timeout 122 memcached_backend 123 memcached_enable_compress 124 memcached_set_mode 125 memcached_object_expire 126 memcached_busy_lock 127 memcached_delayed 128 memcached_namespace 129 130 data_directory 131 images_directory 132 binary_directory 133 preview 134 debug 135 store_method 136 cascade 100 137 ); 101 138 } 102 139