Существует несколько вещей сделать для хранения сессии безопасной:
$_SERVER['HTTP_USER_AGENT']
. Это добавляет маленький барьер для перехвата сеанса. Можно также проверить IP-адрес. Но это вызывает проблемы для пользователей, которые имеют изменяющийся IP-адрес из-за выравнивания нагрузки на нескольких интернет-соединениях и т.д. (который имеет место в нашей среде здесь).При использовании наследования по сравнению с копированием и прошлым могут возникнуть небольшие накладные расходы на память (из-за заполнения), примите во внимание следующие определения классов:
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 байтов.
Компиляция займет немного больше времени, и дополнительных затрат времени выполнения не возникнет. С точки зрения оптимизатора, невиртуальные методы аналогичны процедурам - их можно вызывать, используя только адрес их памяти, без дополнительных затрат из таблицы виртуальных методов.
Если у вас может быть указатель типа Base *, который указывает на объект типа Derived *, вам, вероятно, понадобится виртуальный деструктор, и ваша исходная посылка больше не применяется. Если у производного класса есть пустой деструктор, и у него нет членов или все они являются типами POD, вы можете обойтись без виртуального деструктора, но обычно лучше не рисковать и сделать его виртуальным с самого начала.
Компилятор будет генерировать прямой вызов кода, реализующего каждую невиртуальную функцию-член, поэтому накладных расходов не возникает.
Если вы забываете о виртуальном наследовании, наличие базового класса с точки зрения памяти и производительности эквивалентно наличию члена того же класса. За исключением того, что иногда это может быть даже лучше (например, пустой класс имеет размер по крайней мере один, но наличие пустого базового класса часто может не иметь накладных расходов).
Не совсем, это только увеличило память на базовый класс. Вы можете прочитать больше в здесь в C ++ FAQ