Не будет ли самым простым решением обновить ссылки на объекты Session, зависящие от компании, с помощью динамического ключа, основанного на Company?
Например ...
Session["IsTest"]
становится
Session[createSessionKey(CompanyID, "IsTest")]
, где createSessionKey генерирует соответствующий ключ, возможно, простым объединением Company и Key
Это тогда дифференцирует две или более компаний, получая доступ к сеансу через сгенерированные ключи.
Следуя приведенному выше примеру, company1 получит доступ к переменной сеанса IsTest через ключ company1_IsTest, а company2 получит доступ к той же переменной сеанса IsTest через ключ company2_IsTest.
Надеюсь, у вас нет таких вещей, как Session ("IsTest"), разбросанных по всей вашей кодовой базе, так как это сделает рефакторинг вашего кода реальной болью.
Обычно я абстрагирую свои переменные Session в строго типизированный класс. Тогда мое управление сессиями содержится в одном месте.
Использование идеи наличия базового класса Page и переопределения свойства Session - хороший способ, если все переменные Session должны относиться к конкретной компании. Хотя, если вы можете определить, является ли конкретный ключ сеанса общей переменной сеанса или конкретной компанией, он все равно может быть работоспособным.