эцп не шифрует подписываемые документы, она шифрует только их хэш.
ответ на вопросы о возможности подписывания пхп/жс зависит от того как/где хранятся ключи.
проблема не в сессии, а в логике скрипта.
1. зачем while, если вы достаете одну запись?
2. если данные не получены, нужно показывать ошибку и прекращать выполнение или, хотя бы, обнулить ране сохраненные в сессии данные. вы же продолжаете заполнять шаблон старыми данными из сессии.
это содержимое самого файла.
если оно по дороге никак не менялось, достаточно просто его сохранить.
а дальше с ним можно работать уже как с обычным файлом.
передавать его на фронт – бред (если не знаете как с ним работать).
обычно на фронт передается только ссылка на скачивание. а если вам надо отобразить сам документ – есть варианты.