1. 程式人生 > >【java介面開發】---與Android對接註冊介面的session會話保持問題

【java介面開發】---與Android對接註冊介面的session會話保持問題

技術渣,遇到問題記錄一下,好記性不如爛筆頭嘛(應該是好記性不如寫部落格~~~~~~)

【問題】

         在java後臺寫了獲取驗證碼和註冊的兩個介面,提供給ios和Android呼叫。ios測試註冊過程中都是一條過,但是Android就出現了很尷尬的問題【第一次請求傳送驗證碼後,java把驗證碼存入session後,再請求註冊介面中我取不到了放入session中的驗證碼了,很難受,技術渣也不知道咋回事,Android說我的問題,我說是Android的問題~~~~~~~~~~~~~~~】好了說一下解決辦法。

【分析】

        第二次取不到session中的驗證碼的原因是與Android跨域請求時出現sessionid不是同一個的問題

解決方法

        在Android第一次請求獲取驗證碼介面時把sessionid返回給Android,讓Android在請求註冊介面時在請求頭上加上這個sessionid就大吉大利今晚吃雞了~~~~~~~~~~~

【上程式碼】

    獲取驗證碼時返回sessionid

	@RequestMapping(value = "AppGetCode")
	@ResponseBody
	public JsonResult<String> AppGetCode(HttpServletResponse response,
			HttpServletRequest request, String phone) {
		// 允許跨域請求
		response.setHeader("Access-Control-Allow-Origin", "*");
		//response.setHeader("Access-Control-Allow-Credentials","true");
		if(phone!=null){
				Client client=clientService.findUserByPhone(phone);
				/*判斷client是否為空,如果為空說明手機號沒有註冊,可以進行註冊*/
				if(client==null){
					String code=String.valueOf(Math.random()).substring(2,8);
					//傳送驗證碼,並將驗證碼存入session
					//傳送簡訊API
					Map<String, String> param = clnt.newParam(2);
					param.put(YunpianClient.MOBILE, phone);
					param.put(YunpianClient.TEXT, "【陸港雲】您的驗證碼是"+code+"。如非本人操作,請忽略本簡訊");
					clnt.sms().single_send(param);
					/*>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<*/
					HttpSession session=request.getSession();
					String sessionId = session.getId();
					session.setAttribute("code", code);
					//String code1=(String)session.getAttribute("code");
					return new JsonResult<String>(0, "傳送驗證碼成功", sessionId);
				}else{
					return new JsonResult<String>(1, "手機號被佔用", null);
				}}
		else{
			return new JsonResult<String>(0, "手機號不能為空", null);
		}
	}

Android在請求時加上請求頭資訊

 OkHttpUtils.post()
                .url(ServerConfig.REMOTE_BASE_URL + ServerConfig.REGISTER_URL)
                .addHeader("Cookie", "JSESSIONID=" + sessionId)
                .addParams("account", account)
                .addParams("phoneCode", phoneCode)
                .addParams("password", password)
                .build()
                .execute(new StringCallback() {

好了 劇終了~~~~~~~~~~~(新手上路,有不足的地方還望大佬們指點迷津一下) 

參考大佬部落格: