Revision 253
Date:
2012/09/26 16:26:49
Author:
ahitrov
Revision Log:
Sessions through Memcached
Files:
Legend:
Added
Removed
Modified
koi8/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
koi8/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
…
…
205
206
Handle => $keeper->SQL,
206
207
};
207
208
};
209
} elsif ( $state->{session}->storage eq 'MEMCACHED' ) {
210
eval {
211
tie %session, 'Apache::Session::Memcached', $sid, {
212
Handler => $keeper->{session}->MEMD,
213
Expiration => $state->{session}->{lifetime},
214
# Servers => $state->{session}->memcached_servers,
215
# NoRehash => 1,
216
# Readonly => 0,
217
# Debug => $DEBUG,
218
# CompressThreshold => 10_000
219
};
220
};
208
221
} else {
209
222
eval {
210
223
tie %session, 'Apache::Session::File', $sid, {
211
Directory => $state->session->session_dir,
224
Directory => $state->{session}->session_dir,
212
225
};
213
226
};
214
227
}
…
…
231
244
Handle => $keeper->SQL,
232
245
};
233
246
};
247
} elsif ( $state->{session}->storage eq 'MEMCACHED' ) {
248
eval {
249
tie %session, 'Apache::Session::Memcached', undef, {
250
Handler => $keeper->{session}->MEMD,
251
Expiration => $state->{session}->{lifetime},
252
# Servers => $state->{session}->memcached_servers,
253
# NoRehash => 1,
254
# Readonly => 0,
255
# Debug => $DEBUG,
256
# CompressThreshold => 10_000
257
};
258
};
234
259
} else {
235
260
eval {
236
261
tie %session, 'Apache::Session::File', undef, {
koi8/plugins/session/lib/session/State.pm.proto
12
12
bless $self, $class;
13
13
14
14
# ������� ������������ �������
15
$self->{project} = '@PROJECT@';
16
15
17
$self->{db_type} = 'none';
16
18
$self->{storage} = '@SESSION_STORAGE@' || 'FILE'; ## ��������: FILE POSTGRES MEMCACHED
17
19
$self->{session_dir} = '@SESSIONS@';
…
…
39
41
$self->{debug} = '';
40
42
$self->{store_method} = '';
41
43
$self->{cascade} = '';
42
$self->{memcached_enable} = '';
43
44
45
$self->{memcached_enable} = lc( '@MEMCACHED_ENABLE@' ) eq 'yes' ? 1 : 0;
46
$self->{memcached_backend} = '@MEMCACHED_BACKEND@';
47
$self->{memcached_select_timeout} = '@MEMCACHED_SELECT_TIMEOUT@' || 0.2;
48
$self->{memcached_servers} = [qw(@MEMCACHED_SERVERS@)];
49
$self->{memcached_enable_compress} = lc( '@MEMCACHED_ENABLE_COMPRESS@' ) eq 'yes' ? 1 : 0;
50
$self->{memcached_delayed} = lc('@MEMCACHED_DELAYED@') eq 'yes' ? 1 : 0;
51
$self->{memcached_set_mode} = lc('@MEMCACHED_SET_MODE@') eq 'add' ? 'add' : 'set';
52
$self->{memcached_busy_lock} = 60;
53
$self->{memcached_namespace} = lc( $self->{'project'} ).'|plugin_session|';
54
55
$self->{memcached_object_expire} = undef;
56
57
$self->{storage} = 'FILE' if $self->{storage} eq 'MEMCACHED' && !$self->{memcached_enable};
58
44
59
$self->{facebook_app_id} = '@FACEBOOK_APP_ID@';
45
60
$self->{facebook_app_secret} = '@FACEBOOK_APP_SECRET@';
46
61
$self->{facebook_redirect_uri} = '@FACEBOOK_REDIRECT_URL@';
…
…
92
107
db_name
93
108
db_user
94
109
db_password
95
data_directory images_directory binary_directory preview debug store_method cascade memcached_enable
110
111
memcached_enable
112
memcached_servers
113
memcached_select_timeout
114
memcached_backend
115
memcached_enable_compress
116
memcached_set_mode
117
memcached_object_expire
118
memcached_busy_lock
119
memcached_delayed
120
memcached_namespace
121
122
data_directory
123
images_directory
124
binary_directory
125
preview
126
debug
127
store_method
128
cascade
96
129
);
97
130
}
98
131
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.