Насколько в PHP безопасно хранить данные в $_SESSION?
Абсолютно верно. PHP хранит сериализованные данные сессии в файле на сервере. Между страницами передаётся только идентификатор сессии и передаётся он как раз с помощью cookies. Теоретически можно украсть идентификатор сессии тем самым получив доступ к данным сессии с другого устройства, но довольно просто можно сделать дополнительную защиту привязав сессию к IP например (хранить в сессии и каждый раз проверять, при изменении IP клиента - сбрасывать сессию) или же используйте SSL на своём сайте если на нём имеется достаточно важная информация, в остальных случаях я думаю можно не заморачиватся, но всё же следите за тем что вы делаете - безпосными ваши скрипты делаете вы сами, а не PHP.
файл создается на сервере, ни в коем образом не передается клиенту. Может я заблуждаюсь?
Если у вас сессия хранится в файлах, то вы правы. Но сессию можно хранить в другом месте, например в БД. В общем случае разницы нет, данные сессии клиенту переданы не будут (если вы их не передадите), на клиент уйдет только идентификатор сессии.И что может произойти с данными, если сервер не поддерживает кукисы, а у клиента они включены?
Как вы организуете работу с сессиями, если "сервер не поддерживает кукисы"? Идентификация клиента в общем случае происходит так: сервер получает из клиентской куки идентификатор сессии, находит по нему данные сессии.