Наверху наследования C++ без виртуальных функций

Существует несколько вещей сделать для хранения сессии безопасной:

  1. Используйте SSL при аутентификации пользователей или выполнении секретных операций.
  2. Повторно создайте идентификатор сессии каждый раз, когда уровень безопасности изменяется (такие как вход в систему). Можно даже повторно создать идентификатор сессии каждый запрос, если Вы желаете.
  3. Имейте сессии, испытывают таймаут
  4. Не используйте регистр globals
  5. Аутентификация хранилища детализирует на сервере. Таким образом, не отправляйте детали, такие как имя пользователя в cookie.
  6. Проверьте $_SERVER['HTTP_USER_AGENT']. Это добавляет маленький барьер для перехвата сеанса. Можно также проверить IP-адрес. Но это вызывает проблемы для пользователей, которые имеют изменяющийся IP-адрес из-за выравнивания нагрузки на нескольких интернет-соединениях и т.д. (который имеет место в нашей среде здесь).
  7. Заблокируйте вниз доступ к сессиям в файловой системе или используйте пользовательскую обработку сессии
  8. Поскольку секретные операции полагают, что требование вошло в систему пользователи для предоставления их authenication подробной информации снова
19
задан jameszhao00 14 August 2009 в 18:03
поделиться

5 ответов

При использовании наследования по сравнению с копированием и прошлым могут возникнуть небольшие накладные расходы на память (из-за заполнения), примите во внимание следующие определения классов:

struct A
{
  int i;
  char c1;
};

struct B1 : A
{
  char c2;
};


struct B2
{
  int i;
  char c1;
  char c2;
};

sizeof (B1), вероятно, будет 12, тогда как sizeof (B2) может быть просто 8. Это связано с тем, что базовый класс A дополняется отдельно до 8 байтов, а затем B1 снова дополняется до 12 байтов.

27
ответ дан 30 November 2019 в 02:45
поделиться

Компиляция займет немного больше времени, и дополнительных затрат времени выполнения не возникнет. С точки зрения оптимизатора, невиртуальные методы аналогичны процедурам - их можно вызывать, используя только адрес их памяти, без дополнительных затрат из таблицы виртуальных методов.

15
ответ дан 30 November 2019 в 02:45
поделиться

Если у вас может быть указатель типа Base *, который указывает на объект типа Derived *, вам, вероятно, понадобится виртуальный деструктор, и ваша исходная посылка больше не применяется. Если у производного класса есть пустой деструктор, и у него нет членов или все они являются типами POD, вы можете обойтись без виртуального деструктора, но обычно лучше не рисковать и сделать его виртуальным с самого начала.

Компилятор будет генерировать прямой вызов кода, реализующего каждую невиртуальную функцию-член, поэтому накладных расходов не возникает.

2
ответ дан 30 November 2019 в 02:45
поделиться

Если вы забываете о виртуальном наследовании, наличие базового класса с точки зрения памяти и производительности эквивалентно наличию члена того же класса. За исключением того, что иногда это может быть даже лучше (например, пустой класс имеет размер по крайней мере один, но наличие пустого базового класса часто может не иметь накладных расходов).

3
ответ дан 30 November 2019 в 02:45
поделиться

Не совсем, это только увеличило память на базовый класс. Вы можете прочитать больше в здесь в C ++ FAQ

1
ответ дан 30 November 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: