Как только вы это сделаете, вы в конечном итоге измените строку подключения в зависимости от ввода пользователя. Не используйте пользовательский ввод напрямую, а проверяйте его по списку допустимых значений. Я предлагаю инструкцию Select Case для этого:
' Do this when logging in: '
Dim companyName
companyName = Request.Form("companyName")
Select Case companyName
Case "company1"
Session("companyDB") = "company1"
Case "company2"
Session("companyDB") = "company2"
Case Else
Session.Contents.Remove("companyDB")
' Invalid login! '
End Select
' Do this when connecting to the database: '
Dim connectionString
If Session("companyDB") Then
connectionString = "...database=" & Session("companyDB") & "..."
Else
' Invalid login, go log in again '
End If
Имейте в виду, что это приведет к проблемам, если у вас есть пользователи, которые захотят открыть одну компанию на одной вкладке, а другую - на другой. Им будет интересно, почему они могут видеть только информацию о компании, в которую они недавно вошли.
Если это будет проблемой, вы, вероятно, захотите передать токен в строке запроса для каждой ссылки. Это добавляет сложности, но не очень сильно (кроме утомительной задачи изменения каждой ссылки). Тогда это будет выглядеть так:
' Do this when logging in: '
Dim companyName
companyName = Request.Form("companyName")
Select Case companyName
Case "company1"
Session("company1 - db") = "company1DBName"
Case "company2"
Session("company2 - db") = "company2DBName"
Case Else
' Invalid login! '
End Select
' Do this when connecting to the database: '
Dim connectionString, companyToken
companyToken = Request("companyToken")
If Session(companyToken & " - db") Then
connectionString = "...database=" & Session(companyToken & " - db") & "..."
Else
' Invalid login, go log in again
End If
Для простоты предполагается, что токен будет таким же, как и название компании. Так, например, кто-то войдет в систему для «company1». Сделав это успешно, они получают переменную сеанса с именем "company1 - db", которая содержит имя базы данных (в данном случае, "company1DBName").
Теперь каждая ссылка, по которой они следуют, должна иметь строку запроса, например "? CompanyToken = company1". Поэтому, когда вы подключаетесь к базе данных, вы берете этот токен и используете его для поиска правильного имени базы данных: Session ("company1 "+" - db ") =" company1DBName "
Если они еще не вошли в эту компанию (или если они просто составляют название компании), у них не будет этой переменной сеанса, и они должны перейти к экрану входа в систему.
Если они регистрируются под двумя компаниями одновременно, теперь вы можете справиться с этим, потому что вы будете получать имя базы данных для каждой ссылки.
Имеет смысл?
Что бы вы ни делали, не используйте пользовательский ввод для непосредственного создания строки подключения. Другими словами, следующее является неправильным путем :
Dim connectionString
connectionString = "...database=" & Request.Form("companyDB") & "..."
Удачи!