android如何与asp.net服务端共享session
近期需要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的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;
}
public class HttpUtils {//创建一个http链接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 */ 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+"SESSIONID="+JSESSIONID; } return null; } //检测网络是否有连接 public static boolean isConnect(Context c) { try { // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理) ConnectivityManager connectivity = (ConnectivityManager)c.getSystemService(Context.CONNECTIVITY_SERVICE); if(connectivity != null) { // 获取网络连接管理的对象 NetworkInfo info = connectivity.getActiveNetworkInfo(); if(info != null) { return true; // 判断当前网络是否已经连接 // if (info.getState() == NetworkInfo.State.CONNECTED) { // return true; // } } } return false; } catch(Exception e) { return false; } } public static String getCurrentIp() { try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) { //if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet6Address) { return inetAddress.getHostAddress().toString(); } } } } catch (Exception e) { } return ""; } public static void CancelHttpClient() { if(httpClient != null) { httpClient.getConnectionManager().shutdown(); } }}
android如何与asp.net服务端共享session的更多相关文章
- 自己实现FormsAuthentication.SetAuthCookie方法,怎样在ASP.NET服务端代码中删除客户端Cookie
如何手动设置AuthCookie ASP.NET中实现可以自己实现FormsAuthentication.SetAuthCookie方法,控制更为灵活 /// <summary> /// ...
- Asp.Net_ 服务端向客户端写JavaScript脚本
在Asp.net 服务端处理脚本,一般都用 ClientScriptManager ,即web窗体服务端的this.ClientScript.该对象比较常用的方法: 1.RegisterArrayDe ...
- 如何通过JavaScript构建Asp.net服务端控件
摘要 虽然ASP.NET的服务器控件一直被大家所诟病,但是用户控件(ACSX)在某些场景下还是非常有用的. 在一些极特珠的情况下,我们会使用JavaScript动态的构建页面中的控件,但假设遇到了我要 ...
- android 38 Abdroid客户端和服务端交互
服务端: package com.sxt.day05; import java.io.IOException; import java.util.ArrayList; import javax.ser ...
- Android ListView分页载入(服务端+android端)Demo
Android ListView分页载入功能 在实际开发中经经常使用到,是每一个开发人员必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了測试. 服务端使用MyEcli ...
- Android上传图片到服务器,服务端利用.NET WCFRest服务读取文件的解决方案
在项目中遇到要将Android设备拍摄的照片上传的服务器,将文件保存在服务器本地的文件夹中,数据库中保存的是图片文件名.整个上传是将图片生成二进制流通过HTTP请求上传到服务端,服务端是基于.NET环 ...
- android 图片上传到服务端 文件损坏问题
在网上找的例子,怎么试都不行. 上传上去之后提示文件损坏,不过最后问题还是找到了. 是因为不能在写入流的byte中写入其他内容 这是网上的例子 如果是要在服务端取文件名,可以在这里写入 在服务端获取文 ...
- java访问webservce,保持会话,服务端保存session验证
在进行程序开发的过程中,遇到一个问题,怎么保持会话. 因为一帮进行方法调用很少涉及到即时身份验证的. 例如: 1:客户端登录后服务端保存登录用户信息: 2:客户端持有验证通过key再次请求: 3:服务 ...
- 服务端关闭session的重要性
原因如下: 如果你的站点是一个每日请求上百万级规模的接口服务, 每一次请求(这里应该是没有携带cookie的请求)都会在服务端产生一个session会话,也就是一个小文件. 一般而言,php的sess ...
随机推荐
- ES6解构赋值
前面的话 我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段.在ES6中添加了可以简化这种任务的新特性:解构.解构是一种打破数据结构,将其拆分为更小部分的过程.本文将详细介绍ES6解构赋值 ...
- 【LINUX】主进程、父进程、子进程、守护进程的概念
一.摘要 详解父进程.子进程.守护进程的区别,例子稍候补充 二.定义区别 主进程 程序执行的入口,可以理解为常用的main 函数 父进程 对于子进程而言, 子进程的创造者,可有多个子进程. 任何进程都 ...
- SpringMVC+MyBatis 事务管理一
前言 spring事务管理包含两种情况,编程式事务.声明式事务.而声明式事务又包括基于注解@Transactional和tx+aop的方式.那么本文先分析编程式注解事务和基于注解的声明式事务. 编程式 ...
- Python爬虫番外篇之关于登录
常见的登录方式有以下两种: 查看登录页面,csrf,cookie;授权:cookie 直接发送post请求,获取cookie 上面只是简单的描述,下面是详细的针对两种登录方式的时候爬虫的处理方法 第一 ...
- Java的三种代理模式简述
本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇博文中讲述. 代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下, ...
- css3鼠标悬停图片抖动效果
提供一个参考的链接 http://demo.lanrenzhijia.com/2015/pic0113/
- jquery.imagezoom.js制作鼠标悬停图片放大镜特效、参数和最简教程
一.插件介绍 今天在用到放大镜效果的时候,突然发现网站里没有放大镜的插件.于是总结了一下,放到这里.为自己,也为他人提供方便.jquery.imagezoom.js这款插件用途很简单,就是鼠标移过去, ...
- TP3.2 配置最新的阿里大于sdk
TP3.2 配置最新的阿里大于sdk 最近公司买了阿里云的阿里大于短信验证 ,这里记录下本人接入短信验证的过程和心得. 大家是不是一开始都是和本人一样直接去百度下怎么有没有现成的demo 或者是封装好 ...
- Webpack 打包之体积优化
谈及如今欣欣向荣的前端圈,不仅有各类框架百花齐放,如Vue, React, Angular等等,就打包工具而言,发展也是如火如荼,百家争鸣:从早期的王者Browserify, Grunt,到后来赢得宝 ...
- dfs+剪枝:poj2362
贴题目 Square Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 24604 Accepted: 8449 Descr ...