Skip to content

Instantly share code, notes, and snippets.

@pvolyntsev
Last active September 15, 2015 06:35
Show Gist options
  • Save pvolyntsev/50884ed4d32fe4e0a3bb to your computer and use it in GitHub Desktop.
Save pvolyntsev/50884ed4d32fe4e0a3bb to your computer and use it in GitHub Desktop.
Yii HTTP Sessions component with logic "Suppress PHP Session"
<?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/')
),
),
// ...
),
// ...
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment