2013-07-24 1 views
2

Я создаю приложение в Symfony2 для замены устаревшего приложения, созданного с помощью CakePHP 1.3. Это большое приложение, и для удовлетворения потребностей конечных пользователей было принято решение о том, что новое приложение будет работать вместе с унаследованным приложением, а когда функции старой системы были переписаны в Symfony2, тогда пользователи будут беспрепятственно перенаправляться в новое приложение ,Как заставить Symfony2 использовать те же сеансы, что и CakePHP 1.3?

Чтобы свести к минимуму сбой, было также решено, что пользователю нужно будет только один раз войти в старое приложение и что новое приложение должно предоставлять доступ только пользователю, в зависимости от того, зарегистрировано ли оно или нет. Таким образом, новое приложение опирается на старое приложение для обработки безопасности. Кроме того, старое приложение CakePHP находится на www.domain.org, а новое приложение Symfony2 находится на субдомене new.domain.org.

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

В коде CakePHP 1.3, каждая область имеет следующий код в верхней части:

$this->checkSession(); 

Я никогда не строил приложение CakePHP 1.3, и я не имею знание CakePHP 1.3 (я из CakePHP 2.0). Так делать немного покопаться, я нашел в файле core.php конфигурации для сессии, которая заключается в следующем:

Configure::write('Session.cookie', 'DOMAIN'); 

Configure::write('Session.timeout', '120'); 
Configure::write('Session.start', true); 
Configure::write('Session.checkAgent', true); 

Configure::write('Security.level', 'medium'); 
Configure::write('Security.salt', '***RANDOM STRING***'); 
Configure::write('Security.cipherSeed', '***RANDOM STRING***'); 

Существует также некоторый код для ACL, но это, кажется, не содержат много или делают что-либо. К ним относятся:

Configure::write('Acl.classname', 'DbAcl'); 
Configure::write('Acl.database', 'default'); 

я могу изменить некоторые из кода в CakePHP, чтобы, возможно, согнуть его для работы с Symfony, но я не могу делать какие-либо радикальные изменения в код. Предыдущий программист, который построил CakePHP 1.3, давно исчез, и не оставил никакой документации.

Итак, как я могу заставить Symfony2 использовать те же сеансы, которые CakePHP создает и использует, а также не позволяет CakePHP регистрировать пользователя, если он нажмет на ссылку из нового приложения?

+0

возможный дубликат [Как читать Cookie с помощью Symfony 2?] (Http: // StackOverflow. com/questions/17791519/how-to-read-a-cookie-using-symfony-2) – AD7six

+0

Это не дубликат, так как это относится к сеансам. Кроме того, есть дополнительная проблема с тем, как CakePHP регистрирует пользователя, когда пользователь нажимает ссылку из приложения Symfony2. – mickburkejnr

+0

Идентификатор сеанса хранится в файле cookie. Если это не дубликат, разница в том, что вы просите, не очевидна (ссылка на уже покрытую землю поможет). – AD7six

ответ

-3

хорошо, кажется, что это невозможно в конфигурации PHP по умолчанию (здесь я должен написать, какую версию PHP я имею в виду, но не будет делать это)

по-умолчанию check here

мы имеем session.use_cookies = 1 и session.use_only_cookies = 1 по default this mean, что мы используем сессию cookie.

также, это impossile установить печенье из домена SUBDOMAIN: check here

это значит, что ваш к применению не может иметь такой же печенье и так сессии.

Как уже упоминалось, AD7six можно настроить такой же файл cookie для doamin и subdomain, но для этого по-прежнему требуется изменить конфигурацию по умолчанию php: session.cookie_domain = .domain.com.

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

+1

Передача идентификатора сеанса через URL-адрес? 'session.cookie_domain = .domain.com' (определенный в обоих приложениях) сделает файл cookie сеанса видимым для обоих, для них, конечно, потребуется такая же конфигурация. – AD7six

+0

Я могу подтвердить @ AD7six, я создал файл cookie, доступ к которому можно получить из субдомена. Это правда, что вы не можете получить доступ к куки-файлу из отдельного домена, но вполне возможно получить доступ к файлу cookie из поддомена, как показано AD7six. – mickburkejnr

+0

Я пропустил возможность настроить аналогичный файл cookie для домена и субдомена, НО все равно нужно изменить php config, поэтому не уверен, почему вы так эмоциональны, мой ответ логически правильный :) – Vadim