出于某种原因,$ _SESSION无法在Android应用程序中运行

时间:2016-02-23 01:18:33

标签: java php android mysql session

我正在尝试将登录用户存储在新会话中,从数据库中获取信息,将其放入json数组,然后在android中获取数组并在布局中显示结果。然而,当我运行应用程序时,从php文件返回的数组为空。如果我要在不同的程序(如邮递员)中测试php文件,我会得到正确的答案

{"result":[{"id":"12","fname":"C","lname":"Wei","username":"cw","email":"werrs.‌​com"}]}

这是php文件和java方法。

<?php
session_start();
if($_SERVER['REQUEST_METHOD'] == 'GET'){

    $username = $_SESSION['username'];

    $sql = "SELECT * FROM USER WHERE username = '$username'";

    require_once('connect.inc.php');

    $run = mysqli_query($conn, $sql);
    $result = array();

    while($row = mysqli_fetch_array($run)){
        array_push($result, array(
            'id' => $row['id'],
            'fname' => $row['fname'],
            'lname' => $row['lname'],
            'username' => $row['username'],
            'email' => $row['email'],
        ));
    }

    echo json_encode(array('result'=>$result));

    mysqli_close($conn);
}
?>

在Postman中,它成功获取登录用户,但是在android中却没有。

    private void getUserData() { StringRequest stringRequest = new 
    StringRequest(Request.Method.GET,              
            Config.SERVER_ADDRESS + "GetUserData.php",
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    JSONObject jsonObject = null;
                    try {
                        //json string to jsonobject
                        jsonObject = new JSONObject(response);

                        //get json sstring created in php and store to JSON Array
                        result = jsonObject.getJSONArray(Config.json_array);

                        //get username from json array
                        getUserInfo(result);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);
}

private void getUserInfo(JSONArray jsonArray){
    for(int i = 0; i < jsonArray.length(); i++) {
        try {
            JSONObject json = jsonArray.getJSONObject(i);

            userInfo.add(json.getString(Config.getUsername));
        } catch (JSONException e) {

        }
    }
}

1 个答案:

答案 0 :(得分:0)

为了在服务器端检索先前启动的会话,您的请求必须包含(前一个会话的)会话ID作为GET参数。

PHP的默认值为PHPSESSID = XXXX。

Cookies是邮差不失败的原因。 PHP会自动为具有相应会话ID的cookie附加标题。