1

I have a Symfony2 app and I have to read the sessions set from another, non-symfony app.

The non-symfony app just set its sessions into $_SESSION, as usual.

However, when I attempt to read this session, the data isn't there. No matter I do it by

$session = $this->get('request')->getSession();
var_dump($session->all());

or even (I know I shouldn't do this, but anyway)

var_dump($_SESSION);

and this gives me session already started error, and I have no idea why there is error despite I have never started session in the Symfony app. Tells me if this way actually work so that I can look into session_start() thing.

$session = new Session();
$session->start();
var_dump($session->all());

The PHPSESSID cookie is set in the Symfony2 app and its value is the same as the cookie set in the non-symfony app, but my Symfony2 app just refuse to read the content of the session. ($session->getName() returns PHPSESSID, to be clear)

(To be exact, both apps are under same domain but different subdomains, and I have already set framework.session.domain correctly in app/config.yml in Symfony app and called session_set_cookie_params on the non-symfony app to have the same domain setting to allow sharing session cookie between subdomains i.e. .example.com)

So how do you read sessions in a Symfony2 app/Controller that is set by a non-symfony app? Thanks.

I am using Symfony 2.1, if this matters.

2 Answers 2

8

No need to write a custom session handler, the native one from Symfony2 can directly read/write from the default PHP $_SESSION.

In config.yml of your Symfony2 app, add a save_path option as below:

framework:
    session:
        save_path: ~

Clean the cache, and now your sessions will be saved in the default PHP path instead of the Symfony2 sessions folder. You can now share data, that's what I did to login data between a new Sf2 app and an old Sf1 app.

Sign up to request clarification or add additional context in comments.

3 Comments

this works for me. I think this should be the correct answer for the question and it sure beats writing a new session handler.
this is indeed a much better solution
An excelente solution. And it is working in symfony3 as well. Thank you very much.
3

You won't be able to use the native Symfony2 session wrapper classes because they read session data from app/cache/{env}/sessions/{session_id}, and your non-Symfony2 app isn't writing its session data to that location.

You could write a custom session handler in your non-Symfony2 app that writes to that location, or better still you could write a native session handler class in Symfony2 which bypasses the default Symfony2 session read location and gets it from the default PHP session path

EDIT: Since writing this answer there is now a much more elegant solution available in gadbout's post below.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.