greengarlic
@greengarlic

PHP консольное приложение с механизмом сессий или как идентифицировать пользователя?

Возможно это и кажется идиотской идеей но как то это нужно сделать.

Поясню суть. Есть какое то консольное приложение и в нем куча сервисов. Пользователь вызывает сервисы и они там себе тихонько выполняют что то. Затем пользователь говорит «сгенери репорты», они создаются и мы забываем про этого юзера. Может быть много пользователей.

Как же мне придумать механизм сессий но без кук, и очень хотелось бы без передачи пользователя какого то ID (читай как сессии без кук)

Спасибо за любой извращенный способ :3
  • Вопрос задан
  • 3318 просмотров
Решения вопроса 1
Evengard
@Evengard
Придумал только четыре способа:
1. При каждой команде не выходить из программы. Микро-интерпретатор такой.
2. Попробывать вытащить username и host компа, за которым юзер работает, из каких нить environmental variables
3. Попробывать самому чего нить записать в environmental variables (вместо кук) — удалять как только сессия закончилась
4. Криейтить в /tmp файл заместо куки соответственно. При завершении сессии соответствнено удалять
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
session_id($_SERVER['USER']);
session_start();

а дальше пользуемся сессией как обычно
главное хранить сессию в базе или чтоб у всех пользователей был доступ на запись в папку для файлов сессии (небезопасно)
Ответ написан
Комментировать
greengarlic
@greengarlic Автор вопроса
Спасибо всем!
Остановился на 1 способе что предложил Evengard
получилось как то так:
<?php

$fp = fopen("php://stdin", "r");
$in = '';

$core = Core::getInstance();

while($in != "exit") {
echo "php> ";
$in=trim(fgets($fp));
$str = explode(' ', $in);
$_SERVER['argv'] = array();
foreach ($str as $s) {
$_SERVER['argv'][] = trim($s);
}
echo "\n";
$_SERVER['argc'] = count( $_SERVER['argv']);

$core->run();
}
?>

Пока что подводные камни только в неудобстве ввода. А так ничего в общем. Может я не вижу чего то не очевидного, было бы неплохо узнать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы