Это классическая проблема абстракции. По сути, вам необходимо абстрагироваться от процесса выбора базы данных не только из приложения, но и с экрана выбора.
Думайте об этом в терминах «проблемного пространства». Каждое приложение имеет свое собственное (то есть свою базу данных), а затем у вас есть еще одно, которое представляет собой систему входа клиента. Нет ничего плохого в использовании другой, другой базы данных для этого. С каждым логином будет связана информация о подключении к базе данных. Это означает, что вы можете хранить информацию о базе данных в сеансе PHP вместе с тем фактом, что пользователь вошел в систему (и кем он вошел в систему).
Теперь вашему другому приложению нужен уровень базы данных [1], чтобы научиться искать информацию базы данных в сеансе. Фактически, если вы храните не только имя базы данных, но и имя сервера, логин и пароль, у вас есть свобода размещать некоторых клиентов на одном сервере базы данных, некоторых вместе на другом и т. Д. Вы просто получаете разрешения MySQL правильно (не сложно).
Вероятно, самая большая ошибка в этой мази, однако, состоит в том, что, если выбранное приложение решает взять на себя управление информацией сеанса PHP. Есть несколько способов решить эту проблему. Один из них - скопировать в свой сеанс то, что ему нужно для подключения к правильной базе данных. Во-вторых, сеанс выбора должен выполнять управление сеансами отдельно и, возможно, вручную. Но не храните информацию базы данных в куки. Это может быть изменено не только определенным пользователем, но и передачей безопасности в небезопасное место - браузер.
[1] У вас есть правильный слой базы данных, не так ли? Под этим я подразумеваю, что все ваши mysql_query()
вызовы находятся за обработчиком, либо на заказ, либо что-то вроде PDO.