zoukankan      html  css  js  c++  java
  • [android] 与PHP的session进行交互demo

    从MainActivity跳转到MailIndexActivity,第一个请求接口设置session,第二个activity请求接口获取session

    java代码中获取header头里面的Set-Cookie

    请求的时候,设置头信息Cookie,就可以相当于浏览器获取session

    MainActivity.java

    package com.tsh.test;
    
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
        public Button loginBtn;
        public TextView loginUserName;
        public TextView loginPassword;
        public static String API="http://mail.sina.net/test.php";
        public LoginHandler loginHandler;
        public String sessionIdString;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //获取View对象
            loginBtn=(Button) findViewById(R.id.loginBtn);
            loginUserName=(TextView) findViewById(R.id.loginUsername);
            loginPassword=(TextView) findViewById(R.id.loginPassword);
            //给View对象设置点击事件
            loginBtn.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    //开启新线程
                    Thread loginThread=new Thread(new LoginRunable());
                    loginThread.start();
                }
            });
            loginHandler=new LoginHandler();
        }
        //实现Runable接口,开启新线程
        class LoginRunable implements Runnable{
            @Override
            public void run() {
                try {
                    URL url=new URL(API);
                    HttpURLConnection http=(HttpURLConnection) url.openConnection();
                    http.setRequestMethod("POST");
                    http.setDoInput(true);
                    http.setDoOutput(true);
                    
                    OutputStream ops=http.getOutputStream();
                    PrintWriter pw=new PrintWriter(ops);
                    String username=loginUserName.getText().toString();
                    String password=loginPassword.getText().toString();
                    pw.write("email="+username+"&psw="+password+"&loginfrom=app&output=json");
                    pw.flush();
                    
                    String responseCookie = http.getHeaderField("Set-Cookie");
                    if (responseCookie != null) {
                       sessionIdString = responseCookie.substring(0, responseCookie.indexOf(";"));
                    }
                    
                    InputStream ins=http.getInputStream();
                    byte[] buffer = new byte[1024];
                    int length=0;
                    StringBuilder sb=new StringBuilder();
                    while((length=ins.read(buffer))!=-1){
                        sb.append(new String(buffer,0,length));
                    }
                    
                    Message msg=new Message();
                    msg.what=1;
                    msg.obj=sb.toString();
                    loginHandler.sendMessage(msg);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
            }
        }
        //传递消息的handle
        class LoginHandler extends Handler{
            @Override
            public void handleMessage(Message msg) {
                String loginResponse=(String) msg.obj;
                System.out.println(loginResponse);
                Toast.makeText(MainActivity.this, loginResponse, 10).show();
                Intent intent=new Intent(MainActivity.this, MailIndexActivity.class);
                intent.putExtra("PHPSESSIONID",sessionIdString);  
                startActivity(intent);
            }
        }
    }

    MailIndexActivity.java

    package com.tsh.test;
    
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.widget.Toast;
    
    public class MailIndexActivity extends Activity {
        public static String API="http://mail.sina.net/test.php";
        public Handler sessionHandler;
        public String sessionIdString;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            
            Intent intent = getIntent();  
            sessionIdString= intent.getStringExtra("PHPSESSIONID"); 
            
            setContentView(R.layout.mail_index);
            sessionHandler=new SessionHandler();
            Thread sessionThread=new Thread(new SessionRunable());
            sessionThread.start();
            
            
        }
        class SessionRunable implements Runnable{
    
            @Override
            public void run() {
                URL url;
                try {
                    url = new URL(API);
                    HttpURLConnection http=(HttpURLConnection) url.openConnection();
                    http.setRequestProperty("Cookie", sessionIdString);
                    InputStream ins=http.getInputStream();
                    byte[] buffer = new byte[1024];
                    int length=0;
                    StringBuilder sb=new StringBuilder();
                    while((length=ins.read(buffer))!=-1){
                        sb.append(new String(buffer,0,length));
                    }
                    
                    Message msg=new Message();
                    msg.what=1;
                    msg.obj=sb.toString();
                    sessionHandler.sendMessage(msg);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                
            }
        }
        class SessionHandler extends Handler{
            @Override
            public void handleMessage(Message msg) {
                String str=(String) msg.obj;
                System.out.println("222");
                System.out.println(str);
                Toast.makeText(MailIndexActivity.this, str, 10).show();
            }
        }
    }

    PHP文件:

    <?php
    session_start();
    if(empty($_SESSION)){
       echo "设置session";
       $_SESSION['name']=1; 
       echo session_id();
    }else{
       echo "获取session";
       print_r($_SESSION); 
    }
  • 相关阅读:
    WCF之ABC
    一次性为自定义实体类的数据填充
    在HttpHandlers中使用Session
    ASP.NET 2.0防止同一用户同时登陆
    Winson.Framework 1.5发布!
    SqlPager分页控件的使用!
    ExtJS 学习心得(一)
    [原创]Discuz!NT1.1高亮代码插件1.5稳定版!
    Winson.Framework 1.0发布!
    一个不错的WEB打印解决方案!
  • 原文地址:https://www.cnblogs.com/taoshihan/p/6398859.html
Copyright © 2011-2022 走看看