- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 Android 应用程序和 php 文件有问题。
我有两个 php 文件:* 第一个是在长 if/else block 之后连接:
[...]
else{
$response["message"]="Connexion OK";
session_start();
$_SESSION['id'] = $id;
$_SESSION['pseudo'] = $pseudo;
$_SESSION['options'] = $options;
$response['session'] = $_SESSION['id'];
}
[...]
echo json_encode($response);
我的第二个文件只在连接与否时返回:
<?php
session_start();
$response =0;
if(isset($_SESSION['id'])){
$response= 1;
}
echo $response;
?>
当我在 Firefox 中执行文件的 URL 时,顺序是:1/第二个,我有 02/第一个3/又是第二个,我得到 1
Php 文件构建良好!
现在,我想在 AsyncTasks Android 中执行此操作:无论我在哪个 Activity 中,我首先要测试用户与第二个文件的连接:但返回始终为 0...未连接,甚至在我使用第一个在 Connexion Activity 中调用的记录后。
Android 中还有什么可以打开 Php session 的吗?
感谢您的回答,
这是我的代码:我有一个用于连接的 AsyncTask:
private class AddDataAsyncTask extends AsyncTask<Void, Void, Void> {
String message = "";
[...] //preExecute
@Override
protected Void doInBackground(Void... params) {
Log.i("add", " start doInBackground");
// Making a request to url and getting response
String urlt = url;
if (nameValuePair != null) {
String paramString = URLEncodedUtils.format(nameValuePair, "utf-8");
}
String response = "";
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
CookieStore cookieStore = new BasicCookieStore();
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpGet post = new HttpGet(urlt);
HttpResponse rp = httpClient.execute(post);
if (rp.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
// Server is unavailable
}
response = EntityUtils.toString(rp.getEntity()); //here is your response
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
/* } catch (UnsupportedEncodingException e) {
e.printStackTrace();
*/
if (response != null) {
try {
JSONObject JsonResponse = new JSONObject(response);
message = JsonResponse.getString("message");
if (message.equals("Connexion OK"))
session = Integer.parseInt(JsonResponse.getString("session"));
Log.i("connnnnnexionC", response);
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
[...]//后执行
还有我要检查连接的 AsyncTask:
private class VerifierConnexionAsyncTask extends AsyncTask<Void, Void, Void> {
[...] //preExecute
@Override
protected Void doInBackground(Void... params) {
String response = "";
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpEntity httpEntity = null;
HttpResponse httpResponse = null;
CookieStore cookieStore = new BasicCookieStore();
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpPost httpPost = new HttpPost(url);
httpResponse = httpClient.execute(httpPost);
httpEntity = httpResponse.getEntity();
response = EntityUtils.toString(httpEntity);
Log.i("connnnnexion",response);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
[...]//postExecute
}
首先我输入检查结果是:
我/connnnnexion:0
我转到 Connexion Activity 并使用第一个 AsyncTask 登录:我得到:
I/connnnnnexionC:{"message":"Connexion OK","session":"27"}
所以连接的很好
我重新输入支票,我又一次:
我/connnnnexion:0
解决方案我写了一个新的 Class Connecte:
import org.apache.http.client.CookieStore;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
public class Connecte {
static CookieStore cookieStore;
static HttpContext localContext;
public static void makeCookie(){
cookieStore = new BasicCookieStore();
localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
}
}
在连接 AsyncTask 中我添加:Connexion.makeCookie():
HttpGet post = new HttpGet(urlt);
Connecte.makeCookie();
HttpResponse rp = httpClient.execute(post, Connecte.localContext);
在检查异步任务中我刚刚添加:
HttpPost httpPost = new HttpPost(url);
httpResponse = httpClient.execute(httpPost, Connecte.localContext);
最佳答案
您必须确保您正在使用的连接正在重复使用相同的 cookie。 PHP 通过给每个客户端一个 PHP_SESSION cookie 来管理 session ,并根据您的 PHP_SESSION 跟踪各种值。如果您不在每个请求之间跟踪它,那么 php 会认为您每次都是不同的客户端。
CookieHandler.setDefault( new CookieManager( null, CookiePolicy.ACCEPT_ALL ) );
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpEntity httpEntity = null;
HttpResponse httpResponse = null;
CookieStore cookieStore = new BasicCookieStore();
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpPost httpPost = new HttpPost(url);
httpResponse = httpClient.execute(httpPost, localContext);
httpEntity = httpResponse.getEntity();
确保在所有 future 请求中重用相同的 localContext 对象,以便它们都共享相同的 cookie 并可以保持 PHP session 。
关于PHP session 在 Android 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31728983/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!