`
TrueBrian
  • 浏览: 8533 次
社区版块
存档分类
最新评论

Android 中使用session机制保存用户信息

阅读更多

web应用中的session和cookie机制相信大家已经再熟悉不过了,cookie是一种存在于客户端上的用于保存用户浏览数据的小文件。session存在于服务器中,可以用来区分用户和保存用户信息。session会根据客户端的请求给不同客户端分配一个唯一的sessionId,用来区分session。例如用户登录之后,给用户创建一个session,并在session中保存该用户的相关信息,即可以避免用户的id在网络上传输,又可以保证区分每一个用户。

web中实现session的机制有两种:

1.通过cookie来实现

所谓通过cookie来实现,说白了就是在创建了session之后,把sessionId写入到cookie文件中,之后用户在发送请求的时候,服务器会去cookie中拿session。

2.通过url重写来实现

如果用户禁用了cookie,第一种方法就行不通了。这时就会用到第二种方法。所谓url重写,其实意思就是把sessionid放入到请求的url之后,就是每一次把sessionid显示到url后面,带到服务器后,通过sessionId找到服务器中的session对象。

方法就是催对请求的url进行处理,response.encodeURL(url),使用这个方法,、

一是可以对url进行编码,就是把url中的中文转码成浏览器地址栏中%%什么的,如果url中没有中文,则什么也不干;

二就是我们说的,可以把sessionId加入到url中。

Android中的session机制

android中的session其实道理是一样的,只不过在处理方法上有所不同。理清一下思路:当客户端发送登录请求后,第一次肯定是不会有session的,到达服务器之后,服务器可以为这个特定的客户端创建session:

  HttpSession session = request.getSession(true);  //创建session
  session.setAttribute("uid", user.getUid());      //session中放入id

上面true代表了如果已经创建了session了,则去找这个session,如果没有创建,就为其创建一个session,

第二句就是在该session中放入和该用户相关的信息。那么这个session就和这个用户一一对应,服务器就靠这个来识别用户身份。

其实前面服务器端和web应用都是一样的,但是在客户端:

因为android手机端在访问web服务器时,没有给http请求头部设置sessionID,而使用web浏览器作为客户端访问服务器时,在客户端每次发起请求的时候,都会将交互中的sessionID:JSESSIONID设置在Cookie头中携带过去,服务器根据这个sessionID获取对应的Session,而不是重新创建一个新Session(除了这个Session失效)。

以java.net.HttpURLConnection发起请求为例:

获取Cookie: 

URL url = new URL(requrl);
HttpURLConnection con= (HttpURLConnection) url.openConnection(); 
// 取得sessionid. 
String cookieval = con.getHeaderField("set-cookie"); 
String sessionid; 
if(cookieval != null) { 
sessionid = cookieval.substring(0, cookieval.indexOf(";")); 
}

//sessionid值格式:JSESSIONID=AD5F5C9EEB16C71EC3725DBF209F6178,是键值对,不是单指值

发送设置cookie:
if(sessionid != null) { 
   con.setRequestProperty("cookie", sessionid); 
}

这样的话就可以将服务器分配给客户端的sessionId取到了,在客户端发送请求的时候带上这个sessionid,服务器会根据这和sessionId自动搜索session,这样就保证了服务器和客户端在同一个会话中。


参考:http://blog.csdn.net/dacainiao007/article/details/9234585

http://my.oschina.net/janson2013/blog/111050



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics