2012-11-30 50 views
3

我在JavaScript中使用REST API。当我多次请求REST API时,它会返回(响应)无效的会话ID,但我提供了有效的会话ID,因为我使用此会话ID拉取了数据。
任何人都遇到过这个问题?SugarCRM REST API会话经常过期

function sugarLogin(url, user, password) { 
var request = new XMLHttpRequest(); 
var params = { 
    user_auth: { 
     user_name: user, 
     password: password 
    }, 
    name_value_list: [{ 
     name: 'notifyonsave', 
     value: 'true' 
    }] 
}; 
var json = $.toJSON(params); 
var crm_api = url; 
request.open("POST", crm_api, true); 
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
request.onreadystatechange = function() { 
    if (request.readyState == 4 && request.status == 200) { 
     var response = request.responseText; 
     var response_obj = jQuery.parseJSON(response); 

     if (response_obj) { 
      if (response_obj.name && response_obj.name == "Invalid Login") { 
       //invalid login 
       ProcessingFlag = 3; 
      } else { 
       session_id = response_obj.id; 
       ProcessingFlag = 1; 
      } 
     } 
    } else if (request.readyState == 4 && request.status == 404) { 
     ProcessingFlag = 2; 
    } 
} 
request.send("method=login&input_type=JSON&response_type=JSON&rest_data=" + json);} 

我在上面的代码用于login并设置session_id(全球范围) ,然后使用这个会话ID,我呼吁REST API的search_by_module功能。 它工作正常,但如果频繁发出多个请求,则表示无效的会话ID。

虽然我曾试图再次调用login功能使search_by_module调用之前。 主要问题是当我从search_by_module返回的响应和呈现的HTML之后尝试调用其他REST函数时,它说我无效的会话。我想不通为什么会而我们知道,在服务器会话24的分钟(服务器在那里我们糖例如托管)

+0

我已经更新了我的问题并添加了登录代码,并且使用了与此相同的search_by_module,但rest_data和调用方法不同。 –

回答

2

我敢打赌,你要这个,因为项目3号到期后立即过期:

1 /定义了一个错误回调,用于检查特定的响应(无效登录)并调用登录函数。读你的代码,我猜这是ProcessingFlag = 3;工作。

2 /确保登录正确的功能和全球更新的session_id使未来的函数调用将得到正确的值。

3 /确保你传递一个新的session_id你的所有后续调用如FIRST参数你rest_data。我陷入了这个问题,并且只是为了发现SugarCRM DOESN'T在rest_data中支持命名参数而丢失了很多小时(这是否执行得太差 - 函数参数明智吗?)这是因为我添加了session_id作为最后一个参数以及所有REST调用正在返回无效的ID。

+2

我已经按照你所说的做了所有事情,但是我发现我的问题,这是由于IP(动态IP更改频繁)的变化。由于IP的重大变化,糖期满会议。 感谢您的回复。 –