Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从Symfony2应用程序获取第三方应用程序会话数据?_Php_Symfony - Fatal编程技术网

Php 如何从Symfony2应用程序获取第三方应用程序会话数据?

Php 如何从Symfony2应用程序获取第三方应用程序会话数据?,php,symfony,Php,Symfony,为了实现跨应用程序身份验证(如果用户已登录其他应用程序,则登录我的Symfony2应用程序),我创建了一个Symfony2侦听器类,用于检查有关用户的特定数据是否在会话中。这些数据来自一个非Symfony2(但不是PHP)应用程序 问题是,我在类中使用的会话对象中不存在来自其他应用程序的会话数据 以下是listener(简化)类: 但是$session->get('nomultisateur')总是返回NULL(并且$session->all()和$\u session只返回一些特定于Symfo

为了实现跨应用程序身份验证(如果用户已登录其他应用程序,则登录我的Symfony2应用程序),我创建了一个Symfony2侦听器类,用于检查有关用户的特定数据是否在会话中。这些数据来自一个非Symfony2(但不是PHP)应用程序

问题是,我在类中使用的会话对象中不存在来自其他应用程序的会话数据

以下是listener(简化)类:

但是
$session->get('nomultisateur')
总是返回NULL(并且
$session->all()
$\u session
只返回一些特定于Symfony2的变量),尽管其他应用程序在会话中存储了所有这些数据

当然,我对这两个应用程序使用相同的cookie会话域(在config.yml中配置),我可以轻松地检查PHPSESSID是否相同


所以我的问题是:为什么旧的应用程序会话变量不可用?我如何从我的listener类中获取它们?

如上所述,Symfony2使用会话包存储会话内容。这意味着您必须直接访问
$\u会话
超全局才能使用此功能。

如上所述,Symfony2使用会话包存储会话内容。这意味着您必须直接访问
$\u会话
superglobal才能获得此类功能。

对于我来说,解决方案是直接使用php会话功能。 我还必须检查两个应用程序上的会话名、域和保存路径是否相同

在我的symfony中,我必须添加:
会话保存路径('c:/wamp/tmp')
会话名称(会话ID)
会话_start()
然后使用$\u会话

给我的另一种方法,但我没有使用,就是像这样直接使用会话文件:

“诀窍是使用浏览器发送的会话cookie

例如,一个用PHP编写的旧web应用程序发送了一个cookie 调用了浏览器的IntranetSession。我知道PHP存储在哪里 会话文件,我只是打开了那个文件,并解码了它的内容 使用session_decode()。这种方法的缺点是session_decode() 将其输出直接放入$\u会话,覆盖当前会话 会话数据(甚至是Symfony放在那里的东西)。基本上是规则 如下所示:

$sessionData = file_get_contents($sessionFile);<br>
$tmpSess = $_SESSION;<br>
session_decode($sessionData);<br>
$otherAppSession = $_SESSION;<br>
$_SESSION = $tmpSess;<br>
$sessionData=file\u get\u contents($sessionFile);
$tmpSess=$\u会话;
会话解码($sessionData);
$otherAppSession=$\u SESSION;
$\u SESSION=$tmpSess;





希望这有帮助

对我来说,解决方案是直接使用php会话功能。 我还必须检查两个应用程序上的会话名、域和保存路径是否相同

在我的symfony中,我必须添加:
会话保存路径('c:/wamp/tmp')
会话名称(会话ID)
会话_start()
然后使用$\u会话

给我的另一种方法,但我没有使用,就是像这样直接使用会话文件:

“诀窍是使用浏览器发送的会话cookie

例如,一个用PHP编写的旧web应用程序发送了一个cookie 调用了浏览器的IntranetSession。我知道PHP存储在哪里 会话文件,我只是打开了那个文件,并解码了它的内容 使用session_decode()。这种方法的缺点是session_decode() 将其输出直接放入$\u会话,覆盖当前会话 会话数据(甚至是Symfony放在那里的东西)。基本上是规则 如下所示:

$sessionData = file_get_contents($sessionFile);<br>
$tmpSess = $_SESSION;<br>
session_decode($sessionData);<br>
$otherAppSession = $_SESSION;<br>
$_SESSION = $tmpSess;<br>
$sessionData=file\u get\u contents($sessionFile);
$tmpSess=$\u会话;
会话解码($sessionData);
$otherAppSession=$\u SESSION;
$\u SESSION=$tmpSess;





希望这有帮助

那么,你能在dev tools/firebug等中看到两个应用程序都在使用同一个域作为它们的会话cookie吗?我没有想到会出现这种情况——即使有子域,它们也不会匹配。当我做类似的事情时,我必须按名称设置一个特定的cookie,并在第二个应用程序中按名称检索。或者这就是你所做的吗?是的,我可以看到两个应用在开发工具中使用相同的域(比如Firebug)。每个应用都使用相同的域进行cookie会话(此处:.localhost.com),并且每个应用都位于特定的子域(oldapp.localhost.com/acme.localhost.com)。我在config.yml(会话cookie\u domain:localhost.com)中配置了要使用的域。不幸的是,我无法更改旧的应用程序cookie名称…因此,您能在dev tools/firebug等中看到这两个应用程序使用相同的域作为其会话cookie吗?我没有想到会出现这种情况——即使有子域,它们也不会匹配。当我做类似的事情时,我必须按名称设置一个特定的cookie,并在第二个应用程序中按名称检索。或者这就是你所做的吗?是的,我可以看到两个应用在开发工具中使用相同的域(比如Firebug)。每个应用都使用相同的域进行cookie会话(此处:.localhost.com),并且每个应用都位于特定的子域(oldapp.localhost.com/acme.localhost.com)。我在config.yml(会话cookie\u domain:localhost.com)中配置了要使用的域。不幸的是,我无法更改旧的应用程序cookie名称…谢谢,这就是我最后要做的,我忘了更新我的问题!你的答案是正确的!希望您不要像我一样使用2.2和PHP5.4,因为您需要做很多技巧来实现它…我使用的是Symfony 2.2(但PHP5.3),到目前为止没有任何问题!等着瞧!如果我有任何问题,我会给你更新。谢谢,这就是我最后做的,我忘了更新我的问题!你的答案是正确的!希望您不要像我一样使用2.2和PHP5.4,因为您需要做很多技巧来实现它…我使用的是Symfony 2.2(但PHP5.3),到目前为止没有任何问题!等着瞧!如果我有任何问题,我会给你更新。
$sessionData = file_get_contents($sessionFile);<br>
$tmpSess = $_SESSION;<br>
session_decode($sessionData);<br>
$otherAppSession = $_SESSION;<br>
$_SESSION = $tmpSess;<br>