2

我的问题很简单: sp_session_relogin 是如何工作的?

这是我尝试使用它的方法。

bool login(const char* login, const char* password, bool remember)
{
    if (remember) {
        sp_error err = sp_session_relogin(_session);
        if (err==SP_ERROR_OK) {
            return true;
        }
        if (!login||!password) {
            return false;
        }
    }

    sp_session_login(_session, login, password, remember, NULL);
    return true;
}

我第一次调用我的应用程序

login(0,0,true);

如果它返回false,我会这样回忆

login(username,password,true);

(从 UI 检索用户名和密码)。然后,如果我关闭应用程序并重新启动它,第一次登录调用继续返回 false。

在 iKendac 回答后编辑

我正在调用 sp_session_logout() 但我没有等待调用注销回调。我有它,但它不是更好。这是我的应用程序的结束方式

if (_session) {
    if (_loggedin) {
        char buffer[1024];
        int ret = sp_session_remembered_user(_session,buffer,sizeof(buffer)); 
        if (ret>0) {
            printf("remembered user: %s\n",buffer);
        }
        sp_session_logout(_session);
        int msTilNext = 0;
        while(_loggedin) {
            sp_session_process_events(_session, &msTilNext);
        }
    }

    sp_session_release(_session);
    _session = 0;
}

sp_session_remembered_user 正确返回我的用户名。注销后,我正在等待使用 sp_session_process_events 调用注销回调处理事件。调用注销回调时,_loggedin 变为 false,因此循环结束。我释放会话。和相当的应用程序。

你看到另一个错误或丢失的东西吗?任何想法 ?

谢谢。

4

1 回答 1

3

当您退出应用程序时,请确保您调用sp_session_logout()并等到注销完成回调被触发,然后才允许应用程序终止。否则你可能会得到一个不完整的缓存,这将导致sp_session_relogin()失败。

于 2012-04-28T14:07:13.140 回答