android与asp.net服务端共享session的方法详解
程序员文章站
2023-12-16 16:26:10
前言
最近因为工作的需要,要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的session值中,当客户端收到短信并提交短信码时由asp.net服...
前言
最近因为工作的需要,要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的session值中,当客户端收到短信并提交短信码时由asp.net服务端进行判断,那么如何共享这个session那么需要在android客户端中添加几行代码。
实现方法
如下操作。第一次数据请求时就获取这个cookie的名称并且得到这个cookie的值,这个即是sessionid的值并保存在一个静态变量中,然后在第二次请求数据的时候要将这个sessionid一并放在cookie中发给服务器,服务器则是通过这个sessionid来识别究竟是那个客户端在请求数据的,在asp.net中这个sessionid的名字叫做asp.net_sessionid,当然我们可以从程序中获取。
如下代码:
//获取服务端的这个sessionid的名称 /* 获取cookiestore */ list<cookie> cookies = cookiestore.getcookies(); for(int i=0;i<cookies.size();i++){ string sessionid = cookies.get(i).getname(); 从这里可以获取到这个sessionid,即为 asp.net_sessionid }
获取sessionid的值
for(int i=0;i<cookies.size();i++){ if("asp.net_sessionid".equals(cookies.get(i).getname())){ jsessionid = cookies.get(i).getvalue(); //这个即为sessionid的值 break; } }
完整的httputils代码如下:
public static defaulthttpclient httpclient = null; private static string jsessionid; //定义一个静态的字段,保存sessionid public static string getrequest(string url) { httpclient = new defaulthttpclient(); httpget get = new httpget(url); try { httpparams params = new basichttpparams(); httpconnectionparams.setconnectiontimeout(params, 10000);//设置连接超时 httpconnectionparams.setsotimeout(params, 15000);//设置请求超时 get.setparams(params); get.setheader("content-type", "application/x-www-form-urlencoded; charset=utf-8"); if(null != jsessionid){ get.setheader("cookie", "asp.net_sessionid="+jsessionid); } //连接响应,通过httpresponse获得响应信息 httpresponse httpresponse = httpclient.execute(get); if(httpresponse.getstatusline().getstatuscode() == 200) { //取得响应字符串 string result = entityutils.tostring(httpresponse.getentity()); return result; } } catch (clientprotocolexception e) { return null; } catch (ioexception e) { return null; } return null; } public static string postrequest(string url, hashmap<string, string> rawparams) throws exception { httpclient = new defaulthttpclient(); //创建post请求方式 httppost post = new httppost(url); httpparams cparams = new basichttpparams(); httpconnectionparams.setconnectiontimeout(cparams, 10000);//设置连接超时 httpconnectionparams.setsotimeout(cparams, 15000);//设置请求超时 post.setparams(cparams); post.setheader("content-type", "application/x-www-form-urlencoded; charset=utf-8"); if(null != jsessionid){ post.setheader("cookie", "asp.net_sessionid="+jsessionid); } //使用namevaluepair来保存要传递的参数,可以使用basicnamevaluepair来构造一个要被传递的参数 //通过add添加这个参数到namevaluepair中 arraylist<namevaluepair> params = new arraylist<namevaluepair>(); for(string key : rawparams.keyset()) { //添加要传传递的参数 params.add(new basicnamevaluepair(key, rawparams.get(key))); } //post需要为参数设置字符集 httpentity httpentity = new urlencodedformentity(params, http.utf_8); //请求httprequest post.setentity(httpentity); //发送post请求并获取响应 httpresponse httpresponse = null; try { httpresponse = httpclient.execute(post); } catch(exception ex) { string ee = ex.getmessage(); } if(httpresponse.getstatusline().getstatuscode() == 200) { string result = entityutils.tostring(httpresponse.getentity(), http.utf_8); /* 获取cookiestore asp.net_sessionid就是通过上面的方法获取到。 */ cookiestore cookiestore = httpclient.getcookiestore(); list<cookie> cookies = cookiestore.getcookies(); for(int i=0;i<cookies.size();i++){ if("asp.net_sessionid".equals(cookies.get(i).getname())){ jsessionid = cookies.get(i).getvalue(); break; } } return result; } return null; }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
推荐阅读
-
android与asp.net服务端共享session的方法详解
-
Android编程实现XML解析与保存的三种方法详解
-
Android编程创建与解析xml的常用方法详解
-
基于linux与windows平台下 如何下载android sdk源代码的方法详解
-
Android编程实现XML解析与保存的三种方法详解
-
Android TextView设置背景色与边框的方法详解
-
Android编程创建与解析xml的常用方法详解
-
Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解
-
详解VirtualBox中与主机共享文件夹的方法(图文)
-
Yii框架操作cookie与session的方法实例详解