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を返します。

iKenndacからの回答後に編集

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 に答える