PHP调用LogMeIn Rescue API获取组信息时始终返回NOTLOGGEDIN
排查LogMeIn Rescue API调用返回NOTLOGGEDIN的问题
核心问题分析
你遇到的情况是:SOAP调用login返回login_OK,但后续getGroup返回getGroup_NotLoggedIn;CURL方式获取到auth code后,后续请求同样返回未登录。这本质是会话未在请求间正确保持,LogMeIn Rescue API依赖会话cookie维持登录状态,而默认的PHP客户端设置未启用会话持久化。
具体解决方案
1. 修复SOAP客户端的会话保持
PHP的SoapClient默认不会自动保存复用会话cookie,需显式配置cookie存储维持会话:
// 定义临时cookie存储路径(确保PHP有读写权限) $cookieFile = tempnam(sys_get_temp_dir(), 'lmi_cookie'); // 初始化SoapClient时添加会话相关选项 $soapclient = new SoapClient( "https://secure.logmeinrescue.com/api/api.asmx?wsdl", [ 'trace' => true, 'keep_alive' => true, 'stream_context' => stream_context_create([ 'http' => [ 'cookie_file' => $cookieFile, 'cookie_jar' => $cookieFile ] ]) ] ); $loginparams = [ 'sEmail' => $_POST['lmiuser'], 'sPassword' => $_POST['lmipass'] ]; $loginResult = $soapclient->login($loginparams); print_r($loginResult); $getgroupparams = [ 'iNodeID' => 11956835 ]; $getGroupResult = $soapclient->getGroup($getgroupparams); print_r($getGroupResult); // 清理临时cookie文件 unlink($cookieFile);
关键改动:
- 通过
cookie_file和cookie_jar让SOAP请求共享会话cookie - 启用
keep_alive保持连接复用 - 添加
trace方便调试请求头
2. 修正CURL方式的会话维持
用CURL时,必须确保后续请求复用登录时获取的cookie:
$cookieFile = tempnam(sys_get_temp_dir(), 'lmi_cookie'); // 初始化CURL并设置cookie存储 $ch = curl_init(); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 执行登录请求(需按API要求构造POST参数/XML请求体) curl_setopt($ch, CURLOPT_URL, "https://secure.logmeinrescue.com/api/login.asmx"); $loginResponse = curl_exec($ch); // 执行getGroup请求 curl_setopt($ch, CURLOPT_URL, "https://secure.logmeinrescue.com/api/getGroup.asmx"); // 若用令牌认证,需在参数中携带sAuthCode $getGroupResponse = curl_exec($ch); curl_close($ch); unlink($cookieFile);
注意:令牌认证方式下,每个后续API请求都需携带sAuthCode参数,不能依赖会话cookie,两种认证方式不可混用。
3. 额外排查点
- 核对
iNodeID:确认从管理控制台获取的节点ID无复制错误 - 验证账号权限:确保账号不仅有控制台权限,还开启了API访问权限
- 检查请求头:启用
trace后打印完整请求头,确认cookie在getGroup请求中正确携带 - 避免混合认证:选择login会话或令牌认证其中一种方式执行全程请求
内容的提问来源于stack exchange,提问作者Paul H
相关产品推荐
相关产品推荐

