Насчет get_browser() тоже думал, но эта функция действительно мало, гда работает.
Если в PHPSESSID помещать данные в base64, то нужно составлять такие строки, чтобы в них не было символов =.
Функция call_user_func_array() не допускает использование eval() в качестве callback'а, но твой способ обхода этого ограничения с помощью assert() очень порадовал =)