Android 中使用session机制保存用户信息 分类: android 2014-04-05 16:26 537人阅读 评论(0) 收藏
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
版权声明:本文为博主原创文章,不过你想转载就转载。