1) Ваша конфигурация об auth_method выглядит хорошо.
2) Вот скрипт на python, который я использовал и обновил для внешней аутентификации для ejabberd.
#!/usr/bin/python
import sys
from struct import *
import os
def openAuth(args):
(user, server, password) = args
# Implement your interactions with your service / database
# Return True or False
return True
def openIsuser(args):
(user, server) = args
# Implement your interactions with your service / database
# Return True or False
return True
def loop():
switcher = {
"auth": openAuth,
"isuser": openIsuser,
"setpass": lambda(none): True,
"tryregister": lambda(none): False,
"removeuser": lambda(none): False,
"removeuser3": lambda(none): False,
}
data = from_ejabberd()
to_ejabberd(switcher.get(data[0], lambda(none): False)(data[1:]))
loop()
def from_ejabberd():
input_length = sys.stdin.read(2)
(size,) = unpack('>h', input_length)
return sys.stdin.read(size).split(':')
def to_ejabberd(result):
if result:
sys.stdout.write('\x00\x02\x00\x01')
else:
sys.stdout.write('\x00\x02\x00\x00')
sys.stdout.flush()
if __name__ == "__main__":
try:
loop()
except error:
pass
Я не создал связь с Ejabberd from_ejabberd()
и to_ejabberd()
, и, к сожалению, не могу найти источники.
Как Matt записал, пишет это в конце выполнения сценария по умолчанию. Можно читать об этом здесь в session_write_close ()
Данные сессии обычно хранятся после Вашего сценария, завершенного без потребности назвать session_write_close (), но поскольку данные сессии заблокированы для предотвращения параллельных записей, которыми только один сценарий может управлять на сессии в любое время. При использовании framesets вместе с сессиями Вы испытаете кадры, загружающиеся один за другим из-за этой блокировки. Можно уменьшить время, должен был загрузить все кадры путем окончания сессии, как только все изменения в переменных сеанса сделаны.
Это пишет это и конец процесса на моей установке. Я сделал новое _ session_ write_method:
public function _session_write_method($id, $sess_data) {
var_dump(file_put_contents('/var/www/public_html/testing.txt', serialize($sess_data)));
return(true);
}
и затем:
$_SESSION['foo'] = 'bar';
while(true)
Я выполнил сценарий, ожидал несколько секунд и затем работал 'sudo, уничтожают' на идентификаторе процесса. Это не записало сериализированные данные в файл. Я выполнил его снова без бесконечного цикла, и я добрался: интервал (22) в самом конце страницы и testing.txt успешно писался в и содержался: s:14: "foo|s:3: "панель"";;
Зависит от обработчика. Можно записать собственный обработчик, чтобы удостовериться, что это только происходит так часто, как Вам нравится, если Вы хотите быть абсолютно уверенными в поведении. Существует 6 обратных вызовов, используемых для управления переменными сеанса. Тот звонил, "запись" не должна выполнять реальный ввод-вывод и запись, что файл сессии мог ожидать до вызова для "закрытий". Это - деталь реализации, которая, как я сказал, зависит от обработчика.