在 Android 中维护用户会话

Posted

技术标签:

【中文标题】在 Android 中维护用户会话【英文标题】:Maintaining user session in Android 【发布时间】:2012-05-15 12:08:59 【问题描述】:

我正在尝试为 android 制作社交网络应用程序。我的问题是用户登录时如何维护用户会话?

请帮助我找到上述问题的解决方案。

【问题讨论】:

this link 有帮助吗? 【参考方案1】:

试试

public class Session 
private static String sessionId;
private static String userRole;

public static void setSessionId(String sessionId) 
    Session.sessionId = sessionId;


public static String getSessionId() 
    return sessionId;



使用这个类并将其导入到其他所有活动中。您可以定义自己的函数来维护您的特定会话数据

【讨论】:

【参考方案2】:

http://www.devahead.com/blog/2011/06/extending-the-android-application-class-and-dealing-with-singleton/

请看上面的链接。它的细节相当好。

使用单例来维护用户会话。

【讨论】:

【参考方案3】:

我将DefaultHttpClientHttpRequestInterceptorHttpResponseInterceptor 一起使用。 类似的东西:

public class HTTPClients 

    private static DefaultHttpClient _defaultClient;
    private static String session_id;
    private static HTTPClients _me;
    private HTTPClients() 

    
    public static DefaultHttpClient getDefaultHttpClient()
        if ( _defaultClient == null ) 
            _defaultClient = new DefaultHttpClient();
            _me = new HTTPClients();
            _defaultClient.addResponseInterceptor(_me.new SessionKeeper());
            _defaultClient.addRequestInterceptor(_me.new SessionAdder());
        
        return _defaultClient;
    

    private class SessionAdder implements HttpRequestInterceptor 

        @Override
        public void process(HttpRequest request, HttpContext context)
                throws HttpException, IOException 
            Log.d("SessionKeeper", "Adding session with the following string: " + session_id);
            if ( session_id != null ) 
                request.setHeader("Cookie", session_id);
            
        

    

    private class SessionKeeper implements HttpResponseInterceptor 

        @Override
        public void process(HttpResponse response, HttpContext context)
                throws HttpException, IOException 
            Header[] headers = response.getHeaders("Set-Cookie");
            if ( headers != null && headers.length == 1 )
                Log.d("SessionKeeper", "Keeping session with the following string: " + headers[0].getValue());
                session_id = headers[0].getValue();
            
        

    

【讨论】:

【参考方案4】:

当我尝试发送该会话 id 时,我在我的 android 客户端遇到了类似的问题,服务器端正在创建一个新会话......但是你在 android 客户端检查你没有创建 DefaulthttpClient 两次...创建 httpclient 只需说出主要活动并在其他活动中传递对象......不要创建第二个 HttpClient

【讨论】:

【参考方案5】:

使用 SharedPreferences 创建会话。

public class Session 

    private SharedPreferences prefs;

    public Session(Context cntx) 
        // TODO Auto-generated constructor stub
        prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
    

    public void setusename(String usename) 
        prefs.edit().putString("usename", usename).commit();

    

    public String getusename() 
        String usename = prefs.getString("usename","");
        return usename;
    

现在在创建此类后,当您想像这样使用此用途时,请像这样制作对象 og 此类

private Session session;//global variable 
session = new Session(cntx); //in oncreate 
//and now we set sharedpreference then use this like

session.setusename("USERNAME");
now when ever u want to get username then same work for session object and call this

session.getusename();

祝你好运:) 密码相同

【讨论】:

以上是关于在 Android 中维护用户会话的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 应用程序中维护会话超时处理

Android Login with Token Session:就像用户登录并保持在会话中直到注销

在 php 中登录服务器端时在 android 中进行会话处理

当 su 到 ssh 会话中的另一个用户时,Android 常规用户登录会丢失组信息

移动设备(iOS 和 Android)的 Google 分析会话计数错误

为啥当android在java中调用第二次Web服务时会创建新的会话