downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

SoapServer::SoapServer> <SoapServer::setObject
Last updated: Fri, 13 Nov 2009

view this page in

SoapServer::setPersistence

(PHP 5 >= 5.1.2)

SoapServer::setPersistenceSoapServer の持続モードを設定する

説明

public void SoapServer::setPersistence ( string $mode )

この関数により、ある PHP セッションにおいて複数のリクエスト間でデータを保持することが可能になります。 この関数は、サーバが SoapServer::setClassSoapServer::setObject によりクラスから関数をエクスポートした場合のみ使用可能です。

注意: 持続モード SOAP_PERSISTENCE_SESSION は、そのクラスのオブジェクトについてのみ持続させます。 クラスのスタティックなデータについては対象となりません。 self::$bar ではなく $this->bar を使用しましょう。

パラメータ

mode

SOAP_PERSISTENCE_XXX 定数のうちの一つ

SOAP_PERSISTENCE_REQUEST - リクエスト単位でオブジェクトを持続させる

SOAP_PERSISTENCE_SESSION - セッション単位でオブジェクトを持続させる

返り値

値を返しません。

参考



SoapServer::SoapServer> <SoapServer::setObject
Last updated: Fri, 13 Nov 2009
 
add a note add a note User Contributed Notes
SoapServer::setPersistence
doug dot manley at gmail dot com
31-May-2008 04:54
When using "SoapServer::setPersistence( SOAP_PERSISTENCE_SESSION )", you apparently MUST include the class that was used in "SoapServer::setClass()" BEFORE any "session_*" commands.

I found this out using "__autoload()" and a whole lot of "syslog()"; it kept failing to include the class that I was using for my soap server, but that class is ONLY ever referenced by the page itself, and even then only for the purposes of setting the class for the soap server; none of my code would ever cause it to autoload.  The problem was that I was including my session-handling code first.

If the session gets started BEFORE the page defines the class definition, then persistence CANNOT happen.

The order should be:
1. Include the class for use with the soap server.
2. Start up your session.
3. Set up your soap server.
4. Handle your soap request.
boogiebug at gmail dot com
26-Mar-2008 12:40
setPersistence works only for a single instance of service class.

To use multiple instance of services objects, you need to instantiate the classes into objects and use an undocumented SoapServer's method - setObject() to add the service object into the SoapServer object, and handle the service object persistence with $_SESSION instead.

For example:

$ServiceObjects = array()
$ServiceObjects[0] = new ServiceClass1();
$ServiceObjects[1] = new ServiceClass2();
$ServiceObjects[2] = new ServiceClass3();

$_SESSION['ServiceClass1'] = $ServiceObjects[0];
$_SESSION['ServiceClass2'] = $ServiceObjects[1];
$_SESSION['ServiceClass3'] = $ServiceObjects[2];

...

$Servers = array()
for ( $i = 0; $i < count($ServiceObjects); i++)
{
  $s = new SoapServer($wsdl);
  $s->setObject($ServiceObject[$i]);
  $Servers[] = $s;
}

...

$Server[$i]->handle()

...
jan at pinna dot nl
26-Jan-2008 08:28
I found that using both modes (SOAP_PERSISTENCE_SESSION and SOAP_PERSISTENCE_REQUEST) cannot be used simultaniously. Because it didn't work at once, I started experimenting by using different settings and as stated below in the comments, "...also use SOAP_PERSISTENCE_REQUEST to save objects between requests" led me to think it was nessecary to use both modes. Well, it might for others, be but for me it turned out a day of freaking out ;) (trying all kinds of session stuff, etc etc).
Also, if persistence doesn't work, please check if session_start() is called somewhere in the script and try not to call it twice or whatsoever: it won't work...
leon at leonsio dot com
06-Jan-2008 06:10
attention, if you are using a custon session-handler, the SOAP_PERSISTENCE_SESSION methode will use the files-session handler and not your custom handler. also use SOAP_PERSISTENCE_REQUEST to save objects between requests
jared at ws-db dot com
29-Aug-2005 04:07
I had some issues getting session persistence (SOAP_PERSISTENCE_SESSION) to work. I finally got it working after setting session.auto_start=0, and then only calling session_start() in the script containing the SoapServer. Maybe this is obvious, but took me a bit to figure it out.

I only tried it with session.use_cookies=1, so if the settings above don't work for you, make sure cookies are enabled, though it may work without the need for cookies.
cperez1000 at hotmail dot com
29-May-2005 12:54
Always remember to place the "setPersistence" method before the handle method, otherwise it won't work.  It sounds obvious, but it's still a very common mistake, since no errors are shown.

SoapServer::SoapServer> <SoapServer::setObject
Last updated: Fri, 13 Nov 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites