zoukankan      html  css  js  c++  java
  • httpmime-session 会话保持

    sesion在浏览器和web服务器直接是通过一个叫做name为sessionid的cookie来传递的,所以只要在每次数据请求时保持sessionid是同一个不变就可以用到web的session了,做法是第一次数据请求时就获取sessionid的值并保存在一个静态变量中,然后在第二次请求数据的时候要将这个sessionid一并放在Cookie中发给服务器,服务器则是通过这个sessionid来识别究竟是那个客户端在请求数据的,

    在php中这个sessionid的名字叫做PHPSESSID 

    在Java中这个sessionid的名字叫做JSESSIONID

     1 /**
     2      * post请求
     3      * 
     4      * @param uri
     5      * @param params
     6      * @param handler
     7      * @param context
     8      */
     9     public static void doPost(final String uri,
    10             final HashMap<String, String> params, final Handler handler,
    11             final Context context) {
    12         final Message msg = handler.obtainMessage();
    13         final ProgressDialog progress = ProgressDialog
    14                 .show(context, null, "加载");
    15         new Thread() {
    16             public void run() {
    17                 try {
    18                     HttpClient client = new DefaultHttpClient();
    19                     HttpPost httppost = new HttpPost(uri.trim());
    20                     MultipartEntity reqEntity = new MultipartEntity();
    21                     if (params != null) {
    22                         Set<String> param = params.keySet();
    23                         StringBuilder sb = new StringBuilder();
    24                         if (params != null && !params.isEmpty()) {
    25                             for (String par : param) {
    26                                 String value = params.get(par);
    27                                 if (null == value) {
    28                                     return;
    29                                 }
    30                                 reqEntity.addPart(par, new StringBody(value,
    31                                         Charset.forName("UTF-8")));
    32                             }
    33                         }
    34                     }
    35                     httppost.setEntity(reqEntity);
    36                     Log.i("info", "设置:" + JSESSIONID);
    37                     if (null != JSESSIONID) {
    38                         httppost.setHeader("Cookie", "JSESSIONID=" + JSESSIONID);
    39                     }
    40                     HttpResponse response = client.execute(httppost);
    41                     HttpEntity resEntity = response.getEntity();
    42                     Header[] hs = response.getAllHeaders();
    43                     for (Header h : hs) {
    44                         Log.i("info",
    45                                 "header:" + h.getName() + "," + h.getValue());
    46                     }
    47                     if (resEntity != null) {
    48                         CookieStore mCookieStore = ((AbstractHttpClient) client)
    49                                 .getCookieStore();
    50                         List<Cookie> cookies = mCookieStore.getCookies();
    51                         for (int i = 0; i < cookies.size(); i++) {
    52                             // 这里是读取Cookie['PHPSESSID']的值存在静态变量中,保证每次都是同一个值
    53                             if ("JSESSIONID".equals(cookies.get(i).getName())) {
    54                                 JSESSIONID = cookies.get(i).getValue();
    55                                 break;
    56                             }
    57                         }
    58                         Log.i("info", "取到:" + JSESSIONID);
    59 
    60                         InputStream in = resEntity.getContent();
    61                         ByteArrayOutputStream baos = new ByteArrayOutputStream();
    62                         int i = -1;
    63                         while ((i = in.read()) != -1) {
    64                             baos.write(i);
    65                         }
    66                         msg.what = 1;
    67                         msg.obj = new String(baos.toByteArray(), "utf-8");
    68                     } else {
    69                         msg.what = 0;
    70                     }
    71                 } catch (IOException e) {
    72                     msg.what = 0;
    73                     msg.obj = "";
    74                     e.printStackTrace();
    75                 }
    76                 handler.sendMessage(msg);
    77                 if (null != progress) {
    78                     progress.dismiss();
    79                 }
    80             };
    81         }.start();
    82     }
    83 
    84     public static String JSESSIONID = null;

    其实web的原理都是一样的,基于http协议的,那么如果网站不是java,php做的话,那个叫做Sessionid的Cookie可能叫做别的了 ,而是叫做别的名字了,这个可能要具体情况去查了。

    其实不只是Android程序,其他任何程序需要这么用的时候只需要在http协议请求header里头加上发送相应的SessionId就可以了。刚刚这种方法是可以帮助理解sessionid的,其实还有一种方法如果更通用的话,就可以将刚刚所有的Cookie每次都发回到服务器端,也就可以解决session保持的问题了,只是这样可能会稍微大些网络流量开销而已。

    来自:http://l62s.iteye.com/blog/1663113

  • 相关阅读:
    利用console控制台调试php代码
    数据库比对脚本(PHP版)
    Symfony框架系列----1.入门安装
    Symfony框架系列----常用命令
    Symfony命令行
    Linux SCP指令
    Linux 搭建SVN服务器
    Linux下 保存 git账号密码
    js 视差滚动 记录备份
    移动端 -webkit-user-select:text; ios10 bug 解决方案
  • 原文地址:https://www.cnblogs.com/mjorcen/p/3620455.html
Copyright © 2011-2022 走看看