admin管理员组

文章数量:1568304

1. 登录

1.1 javaweb中如何去维持登录状态

  • 登录后信息放入 session中
  • 页面内验证session中是否有登录信息
  • 如果有,不需要再次登录
  • 如果没有,跳转登录页面
  • 如果登录后点击注销,删除session中登录信息,并清除页面缓存(必要的)

1.2 javaweb中哪些情况我们的session会过期

  • 过期–>很长时间没有去访问网站
  • 主动关闭–>用户注销
  • 切换浏览器

1.3 手机端如何维持登录状态

通过sessionKey/tokenKey

登录协议

1.3.1 sessionKey/tokenKey哪里来?

登录成功之后,后台返回

1.3.2 sessionKey/tokenKey生成有什么规则?

后台返回的,按照一定规则生成的(比如可以随机数生成一个24位以上的字符串)

1.3.3 登录成功返回的sessionkey/tokenKey存到哪里?

保存到sp中就可以了

1.3.4 sessionkey/tokenKey使用场景

有些协议需要用到登录信息,就需要看登录状态,就需要用到sessionkey/tokenKey,比如支付协议

1.3.5 如何使用sessionkey/tokenKey?

需要登录状态,判断sp中是否有sessionkey/tokenKey?

  • 有:那当前是已登录状态,就把个人信息和sessionkey/tokenKey上传到服务器;
  • 没有:跳到登录界面,让用户登录

1.3.6 谁去判断sessionkey/tokenKey是否过期?

任何协议把sessionkey/tokenKey传到服务器.服务器会判断sessionkey/tokenKey是否过期?

  • 过期:告知客户端,登录状态已过期,需要重新登录
  • 未过期:可以使用当前的登录信息,继续走逻辑

1.3.7 为什么判断是否过期需要后台做?

因为前端可以修改当前时间?

1.3.8 sessionkey/tokenKey多久过期?

这个具体看公司

1.3.9 后台如何去判断sessionkey/tokenKey是否过期?

  • 分配sessionkey/tokenKey的时候记录时间
  • 判断是否存在对应的sessionKey:如果不存在,是不是直接就是无效.
  • 某一时刻,用户判断sessionkey/tokenKey是否过期的时候,拿着当前时间和sessionkey/tokenKey分配时间做比较
  • 大于指定时间:过期
  • 没有大于指定时间:未过期

2. logindemo

public class MainActivity extends Activity {
   

    private Button  mLogin;
    private SPUtil  mSpUtil;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mLogin = (Button) findViewById(R.id.login);
        mSpUtil = new SPUtil(MainActivity.this);
        mLogin.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO
                        try {
                            DefaultHttpClient httpClient = new DefaultHttpClient();
                            HttpGet get = new HttpGet(
                                    "http://mobileif.maizuo/user/login?"
                                    + "username=18682036558&"
                                    + "password=96e79218965eb72c92a549dd5a330112&"
                                    + "type=1&"
                                    + "userType=1&"
                                    + "appType=31&"
                                    + "agentID=0-maizuo&"
                                    + "loginType=1&"
                                    + "clientID=31&"
                                    + "channelID=31");
                            HttpResponse response = httpClient.execute(get);

                            if (response.getStatusLine().getStatusCode() == 200) {
                                HttpEntity entity = response.getEntity();
                                String result = EntityUtils.toString(entity);
                                System.out.println("result :" + result);
                                // 得到sessionKey保存到sp中
                                JSONObject jsonObject = new JSONObject(result);
                                String sessionKey = jsonObject.optString("sessionKey");

                                // 保存到sp中
                                mSpUtil.putString("sessionKey", sessionKey);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
        });

        findViewById(R.id.pay).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // 这个地方需要使用sessionKey,对应的一般操作,首先判断是否存在
                String spSessionKey = mSpUtil.getString("sessionKey", "");
                if ("".equals(spSessionKey)) {
                    Toast.makeText(getApplicationContext(), "请先登录", 0).show();
                    return ;
                }
                //接着就是把对应的sessionKey和userid和payinfo上传给服务器
            }
        });
    }

}

返回数据

3. 绘流程图说明sessionKey的使用

以确认支付协议为例

验证码登录/注册_简单流程

1、提交手机号 2、下发短信验证码 3、提交验证码

验证码后台过期逻辑

验证码登录/注册_流程描述

  • 用户填写手机号,点击发送验证码,发送请求把手机号传到server
  • server调用短信平台的接口知道发送内容,发送对象,完成短信的发送
  • 用户收到短信,得到验证码,填写验证码,发送请求把手机号,验证码上传到server
  • server判断我们的验证码是否正确,验证是否过期,根据不同的判断,返回不同的结果

share sdk 短信验证码理解

Android登录注册模块解决方案

原文链接:http://blog.csdn/wwj_748/article/details/50575642

几乎每个app都会有登录注册的功能,可以看看笔者开发的『南方周末新闻阅读器』,登录、手机注册、忘记密码这些入口,这些功能在app中要如何来实现呢?这个模块看似很简单,但要做好就需要考虑很多细节,比如对用户的输入的容错,操作的提示文案的设定,登录成功保存用户信息等等。

业务逻辑描述上一节的流程图已经很清晰的展现了登录注册的流程,这里继续用文字说明一下:
1. 点击进入个人中心或者需要用户登录状态的操作,先判断用户是否已经登录。
2. 如果已经登录,则继续后面的业务,否则,跳转到登录页面进行登录。
3. 如果已经有账号,则可以直接登录,或者可以直接选择第三方平台授权登录。
4. 如果未注册账号,则需要先进行账号注册,注册成功后再登录;也可以不注册账号,通过第三方平台授权进行登录。
5. 如果有账号,但忘记密码,则需要进行重置密码,否则直接登录。

具体实现登录可以使用账号登录,现在的app基本上都是手机号码登录,注册的时候也是一个手机对应一个账号,通过发送验证码进行验证;用户也可以选择第三方平台进行登录,一般会提供微信、QQ、新浪微博这样的主流社交平台进行授权登录,这里使用了友盟的SDK进行实现。

登录注册的解决方案,已经做成一个Demo,大家在实际开发的时候可以参考着根据自身的业务进行调整,但基本上不会差太多,第三方登录、验证码这个都可以选用第三方服务来实现

示例代码:LoginActivity.Java

package com.devilwwj.loginandregister;  

import android.app.Activity;  
import android.content.Intent;  
import android.os.Bundle;  
import android.text.TextUtils;  
import android.text.method.HideReturnsTransformationMethod;  
import android.text.method.PasswordTransformationMethod;  
import android.view.KeyEvent;  
import android.view.View;  
import android.view.inputmethod.EditorInfo;  
import android.widget.TextView;  
import android.widget.Toast;  

import com.devilwwj.loginandregister.global.AppConstants;  
import com.devilwwj.loginandregister.utils.LogUtils;  
import com.devilwwj.loginandregister.utils.ProgressDialogUtils;  
import com.devilwwj.loginandregister.utils.RegexUtils;  
import com.devilwwj.loginandregister.utils.ShareUtils;  
import com.devilwwj.loginandregister.utils.SpUtils;  
import com.devilwwj.loginandregister.utils.ToastUtils;  
import com.devilwwj.loginandregister.utils.Utils;  
import com.devilwwj.loginandregister.views.CleanEditText;  
import com.umeng.socialize.bean.SHARE_MEDIA;  
import com.umeng.socialize.controller.UMServiceFactory;  
import com.umeng.socialize.controller.UMSocialService;  
import com.umeng.socialize.controller.listener.SocializeListeners.UMAuthListener;  

本文标签: 机制OAuth