Snippets

Pavel Volyntsev Yii HTTP Sessions component with logic "Supress PHP Session"

Created by Pavel Volyntsev
<?php
/**
 * Class LazyHttpSession
 * Обеспечивает подавление создания сессий PHP
 *
 * @author pavel.volyntsev@gmail.com
 * @link http://copi.st/nMen
 */
class LazyHttpSession extends CCacheHttpSession // здесь надо указать супер-класс, используемый в твоём приложении
{
	/**
	 * Подавить создание сессии : открывать сессию PHP только при наличии сессионной куки
	 * @var bool
	 */
	public $suppressStart = true;
	public function open()
	{
		// если включено подавление старта и сессионная кука не найдена, сессию не открывать
		if ($this->suppressStart && !isset($_COOKIE[session_name()]))
			return;
		// иначе обычное поведение [ CHttpSession::open() ]
		parent::open();
	}
}
<?php
/**
 * @file protected/config/main.php
 */
// ...
$request = new \CHttpRequest; // издержка - требуется дополнительный объект для разбора входящего запроса
$uri = $request->getRequestUri();
return array(
 	// ...
 	'components'=>array(
		// ...
		// Настройки для базы данных
		'session' => array(
 			'class' => 'application.components.LazyHttpSession', // указать класс для работы с сессией
			// ...
			'autoStart' => false, // выключить сессии для анонимных пользователей
			'suppressStart' => (
			    // сессию стартовать только при наличии сессионной куки
			    // а также на страницах регистрации, логина или панели администратора
				false === strpos($uri, '/login/')
				&& false === strpos($uri, '/register/')
				&& false === strpos($uri, '/admin/')
			),
		),
		// ...
	),
	// ...
);

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.