牛骨文教育服务平台(让学习变的简单)
博文笔记

Android终端APP访问服务器保持在同一个session的方式

创建时间:2016-12-09 投稿人: 浏览次数:5857

在实际开发中,会有这样一个问题:

WEB应用为了做到安全性更好,会将登录成功的用户信息保存在session中,并且使用过滤器进行登录拦截。只有登录后的用户才能继续操作,没有登录的用户会提示他去登录。比如,阿里云邮箱登录后才能看到邮件的详细内容,当页面长时间没有被用户操作,会提示用户登录超时,需要重新登录。这样的场景在web项目中都会有,登录信息基本是被保存在服务器的session中。

session就是一次会话,一个用户使用同一个浏览器登陆同一个web网站,就会产生一个跟此用户对应的session对象,多个浏览器或者多个用户的session是独立并且唯一的,互不干扰。而session又是保存在服务器端的对象,所以安全性比较好。一般会把登录成功的用户信息保存在session中,要用到用户信息就从session中取,一般web项目判断用户是否登录了,就是判断session中是否有用户信息。

如果Android手机端APP和Web共用一个后台,则android就需要保证用户的每一个访问链接都是在同一个session中,在android中怎么保证在同一个session中,具体代码如下。

在登录成功的返回方法中添加如下获取sessionId的代码:

// 取得sessionid. 
				String cookieValue = httpURLConnection.getHeaderField("set-cookie"); 
				
				if(cookieValue != null) { 
					sessionid = cookieValue.substring(0, cookieValue.indexOf(";")); 
					//获得到sessionId之后,可以将sessionId保存在磁盘,使用SharePreference
				}

在之后的每一个请求连接中添加cookie请求头信息,代码如下:

HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
			httpURLConnection.setRequestProperty("cookie", sessionId); //这里是主要的代码
			httpURLConnection.connect();
通过session,可以做到自动登录。做自动登录需要将sessionId保存到本地磁盘中(持久化保存)。下载请求后台服务器的时候将sessionid如上代码一起传递就行。但是要注意一个问题就是session也是有有效期的,session的有效期默认是30分钟,30分钟之后需要再次登录,当然也可以修改session的有效期,具体修改方法网上很多,谷歌一下就行了。


OkHttp的操作方式如下:

Request request = new Request.Builder()
				.url("http://192.168.73.23:8080/GoodsManagerTest/goodslist.do?page=0")
				.addHeader("cookie", sessionid)
				.build();
		try {
			Response response = okHttpClient.newCall(request).execute();
			System.out.println(response.body().string());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
以上OkHttp的方式跟Http URLConnection方式最终的效果是相同的。只是现在使用OkHttp的人越来越多,可以作为一个参考。

以上所有代码亲测有效。如果有问题欢迎指正。


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。