我试图在PHP中使用SOAP扩展实现有状态的Web服务。 (是的,我知道Web服务应该是无状态的;我真正关心的是某种形式的会话ID,所以我不需要每次调用该服务都需要进行身份验证)。 PHP.net的API文档在这方面有点缺乏,并且没有其他的东西写在它上面。使用SOAP的有状态PHP Web服务
我找到了一个讨论它的页面(http://bytes.com/forum/thread160816.html)并将该代码作为测试实现。我构建了一个使用Web服务并调用每个函数并显示结果的小型.NET应用程序。从我读过的内容来看,只要使用setClass()函数将函数封装在类中,并且setPersistence()函数通过SOAP_PERSISTENCE_SESSION,PHP SOAP扩展就会在调用之间保持类变量。
这里是我的代码:
<?php
class User
{
var $name = "Initial value";
function setName($name)
{
$this->name = $name;
// Tried this too.
// $this->name = "Set to string constant" ;
}
function getName()
{
// This always returns "Initial value"
return $this->name;
}
}
// Tried placing session_start() in several places
// before $server->handle()...
// One guy says this doesn't need to be called.
// I assume it depends on if session autostart is on.
session_start();
$server = new SoapServer(null, array('uri' => 'http://localhost/'));
$server->setClass('User');
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
?>
我遇到的问题是$名称不会调用之间仍然存在 - 我总是得到初始化值,而不是我给你价值的setName()。正如我所说的,我试图在对数据库进行身份验证后坚持会话ID - 如果有人有更好的方法来做到这一点,我愿意接受建议;不过,我仍然想解决一般情况。有人有主意吗?
你能举个例子吗?我的意思是如何在服务器端恢复会话? – Cleankod 2011-03-25 19:18:00