Обработка сеанса с нуля

Я хочу создать обработчик сеанса с нуля. Я не хочу использовать session_set_save_handler . Я ничего не могу найти, хотя и не знаю, с чего начать. Может ли кто-нибудь указать мне в правильном направлении или объяснить лучший способ сделать это?

Благодаря! 🙂

При попытке создать собственный механизм сеанса можно отметить несколько вещей.

Первое, что вы можете сделать, это написать оболочку сеанса PHP. Класс, который завершит работу PHP Session. Поэтому, когда вы хотите использовать Session, вы можете создать экземпляр своего класса сеанса и делать все, что хотите, с сеансов. Вы можете сделать что-то вроде этого:

 class Session { /** * Starts new or resumes existing session * * @access public * @return bool */ public function start() { if(session_start()) { return true; } return false; } /** * End existing session, destroy, unset and delete session cookie * * @access public * @return void */ public function end() { if($this->status != true) { $this->start(); } session_destroy(); session_unset(); setcookie(session_name(), null, 0, "/"); } /** * Set new session item * * @access public * @param mixed * @param mixed * @return mixed */ public function set($key, $value) { return $_SESSION[$key] = $value; } /** * Checks if session key is already set * * @access public * @param mixed - session key * @return bool */ public function has($key) { if(isset($_SESSION[$key])) { return true; } return false; } /** * Get session item * * @access public * @param mixed * @return mixed */ public function get($key) { if(!isset($_SESSION[$key])) { return false; } return $_SESSION[$key]; } } 

Затем вы можете использовать этот класс сеанса следующим образом:

 $session = new Session(); $session->start(); $session->set('id', 5); echo $session->get('id); 

Мне это нравится, поскольку я могу использовать PHP-сессии как объекты и не должен использовать функции PHP. Но учтите, что вы все равно используете PHP-функции, вы просто не видите его при использовании этого класса. Это поможет вам понять, как работают PHP-сессии.

Если вы решите укусить пулю и написать свой собственный механизм сеанса, есть несколько замечаний. Прежде всего, вам нужно решить, где вы будете хранить информацию о сеансе? Вы можете сохранить их в базе данных, в файловой системе, в файле cookie и т. Д. По умолчанию PHP сохраняет сеансы в файловой системе. Самый простой способ написать собственный механизм сеанса – сохранить сеансы в cookie. Codeigniter делает это по умолчанию, если вы используете сеансы Codeigniter.

Вы должны написать свой собственный объект, который будет иметь методы для чтения, записи, редактирования, удаления … сеанса. Этот массив нужно будет сериализовать до сохранения в файл cookie. После того, как сеансы будут сохранены в файле cookie, вы можете использовать методы, которые вы написали, чтобы получить их, отредактировать или удалить их. При этом обратите внимание на безопасность, так как пользователь может просматривать свои файлы cookie. Вам нужно будет склеить значение сеанса.

Затем, если вы решите сохранить сеансы в базе данных, вы можете использовать те же самые методы, которые у вас есть, но на этот раз сохранить сеансы в базу данных вместо этого в файл cookie.

Лучшим способом было бы написать Session Interface, который будет реализован каждым классом сеанса. Таким образом, вы можете использовать свой класс Session и не заботятся о том, где хранятся сеансы.

Если вы не понимаете, о чем я говорю сейчас, просто создайте собственную оболочку сеанса, это поможет вам узнать больше о сеансах. И дал вам хороший способ общаться с сеансами, используя ООП. После этого вы можете использовать этот API для написания интерфейса сеанса и реализовать этот интерфейс в каждом классе сеанса и написать свою собственную логику, как и где вы будете сохранять данные сеанса.

И еще одна вещь, нет ничего плохого в механизме сессий PHP.

что я делаю при вызове сеанса

// для запуска сеанса и установки var

session_start ();

$ _SESSION [ 'Войти'] = 'да';

$ _SESSION [ 'someinfo'] = $ Var;

// при вызове

session_start ();

$ var = $ _SESSION ['someinfo'];

надеюсь, это поможет

-kris

Вам не нужно использовать обработку сеансов PHP, если вы используете зашифрованные файлы cookie . В основном стандартные сеансы хранят данные на сервере (memcache, файл или базу данных), а идентификатор / ключ к данным помещаются в файл cookie, заданный агенту пользователя.

Зашифрованные файлы cookie просто хранят данные в файле cookie в пользовательском агенте и вообще отказываются от ID / ключа. Это уменьшает нагрузку на сервер, поскольку хранилище выгружается пользователю.

Если данные недостаточно важны для шифрования, вы также можете просто HMAC подписывать содержимое файла cookie, чтобы люди не меняли его, даже если они могут видеть исходное содержимое.

Вы можете попробовать мою простую библиотеку PHP Kit, которая использует зашифрованные файлы cookie.

 $_SESSION = \Kit\Cookie::get('session'); ...do stuff... \Kit\Cookie::set('session', $_SESSION); 

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