android与web服务器要在同一session下通信的问题。

在解决问题前先回顾下Session与Cookie

Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。

Session可以用Cookie来实现,也可以用URL回写的机制来实现。

Cookie和Session有以下明显的不同点:

1)Cookie将状态保存在客户端,Session将状态保存在服务器端;

2)Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。

3)Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是不同用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;

4)就安全性来说:当你访问一个使用session 的站点,同时在自己机器上建立一个cookie,建议在服务器端的SESSION机制更安全些.因为它不会任意读取客户存储的信息。

Session机制

Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。

Session的实现方式

1 ) 使用Cookie来实现

服务器给每个Session分配一个唯一的JSESSIONID,并通过Cookie发送给客户端。

当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器能够找到这个客户端对应的Session。

 2 )使用URL回显来实现

URL回写是指服务器在发送给浏览器页面的所有链接中都携带JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带给服务器。
如果直接在浏览器中输入url来请求资源,Session是匹配不到的。

Tomcat对 Session的实现,是一开始同时使用Cookie和URL回写机制,如果发现客户端支持Cookie,就继续使用Cookie,停止使用URL回写。如果发现Cookie被禁用,就一直使用URL回写。jsp开发处理到Session的时候,对页面中的链接记得使用 response.encodeURL() 。

回顾完Session和Cookie,我们来说说为什么手机端与服务器交互没有实现在同一session下

1)原因很简单,就是因为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:

URL url = new URL(requrl);
HttpURLConnectioncon= (HttpURLConnection) url.openConnection(); 
if(sessionid != null) { 
con.setRequestProperty("cookie", sessionid); 
}

只要设置了sessionID,这样web服务器在接受请求的时候就会自动搜索对应的session了,从而保证了在同一会话Session。

文章出处:http://hi.baidu.com/cuihenrychl/item/a08e18268a01461577272ce4

android 获取sessionid相关推荐

  1. android屏幕密度高度,Android获取常用辅助方法(获取屏幕高度、宽度、密度、通知栏高度、截图)...

    我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现.下面就分享一下Android中常用的一些辅助方法: 获取屏幕高度: /** * 获得屏幕高度 * @para ...

  2. Android获取当前时间

    2019独角兽企业重金招聘Python工程师标准>>> Android获取当前时间 2012-01-09 17:29:55|  分类: 私人日志 |字号 订阅 [转自stay] 取得 ...

  3. Android获取设备状态栏status bar高度的正确姿势

    Android获取设备状态栏高度的正确姿势 正确代码方式: int height = 0;int resourceId = getApplicationContext().getResources() ...

  4. 格式android id,android 获取APP的唯一标识applicationId的实例

    使用getIdentifier()方法可以方便的获各应用包下的指定资源ID. 方式一 int indentify = getResources().getIdentifier("com.te ...

  5. android 获取图片

    Android获取手机或者内存卡里面的图片有两种方式 1.这是通过一种action Intent intent=new Intent();intent.setAction(Intent.ACTION_ ...

  6. android 获取短信验证码倒计时

     android 获取短信验证码倒计时 public class MainActivity extends Activity { private Button submit;     privat ...

  7. [置顶] Android代码----android获取3G或wifi流量信息

    android获取3G或wifi流量信息: IBatteryStats battryStats = IBatteryStats.Stub.asInterface(ServiceManager.getS ...

  8. android 获取视频缩略图终极解决方案(ffmpeg)

    android 获取视频缩略图终极解决方案(ffmpeg) 参考文章: (1)android 获取视频缩略图终极解决方案(ffmpeg) (2)https://www.cnblogs.com/juka ...

  9. 【备忘】Android获取正在使用网络的IP4地址

    [备忘]Android获取正在使用网络的IP4地址 public String getLocalIpAddress() { String ipaddress="";try { fo ...

最新文章

  1. android处理url中的特殊字符
  2. 设计模式————单例模式
  3. ctb伺服驱动器说明书_青岛FANUC伺服电机364、453故障维修
  4. android wm 改变大小,Android 屏幕适配经验总结
  5. kotlin学习笔记——sqlite(anko)
  6. mysql stack is full_mysql优化之表的优化与列类型选择
  7. 前端学习(1798):前端调试之css伪元素练习
  8. Flink的Table API 与SQL介绍及调用
  9. 计算机组成原理笔记——存储器分类、层次结构、技术指标、存储单元地址分配
  10. windows2008R2+IIS部署python Django的web环境
  11. 23种设计模式(1)-单例模式
  12. 地方命令SqlServer2008中解决在表上点右键把【编辑前200行】变成【编辑前10000行】的方法!...
  13. 【第17天】SQL进阶-查询优化- SHOW STATUS(SQL 小虚竹)
  14. 手机应用市场优劣势比较
  15. 心动的本质是什么_风动,幡动,仁者心动,到底是什么在动
  16. 项目2-Time类中的运算符重载
  17. AVPro Video官网下载
  18. Word文档基本操作
  19. excel怎么设置打印区域_Excel如何设置打印区域及打印区域如何调整
  20. 小米8Lite刷机教程(大多数手机操作基本通用)

热门文章

  1. 怎样理解高内聚低耦合?
  2. 基础76 字符串排序
  3. 2012河北省职称计算机题,2012河北省职称计算机基础知识题库
  4. B2C电子商务系统研发——概述篇
  5. 在PHP中生成随机的字母数字字符串
  6. 09-Redis IO 多路复用
  7. 气质结果重复性比较和pdf结果文件的批处理
  8. JavaScript基础之三JavaScript变量和数据类型
  9. Entity Framework走马观花之把握全局
  10. css滚动条占了宽度,css – 计算定位元素时的滚动条宽度