继续登录会话燃料



最近,我创建了一个网站,可以读取温度和湿度值,并为物联网设备设置所需的温度值。为了安全起见,只有在用户登录后才能读取或设置物联网值。这是通过在登录成功时设置会话ID来完成的。

登录脚本相关部分:

<?php
if ($userData['username'] == $username && $userData['password'] == $password) {
echo "Login success.";
session_start();
$_SESSION['nID'] = true;
header('refresh: 3; url=app/index.php');
}
?>

使用POST请求处理登录。

如你所见,只要登录成功,用户就会被重定向到app/index.php。

在app/index.php开始时,正在检查是否设置了会话ID。如果不是这种情况,用户将被重定向到登录页面。

app/index.php相关部分:

<?php
session_start();
if (!isset($_SESSION['nID'])) {
header("Location: ../index.html");
die();
} else {
//other content of the page
?>

这似乎是正确的工作,当我测试它在我的电脑上的web浏览器。现在我正试图使一个Android应用程序在Kotlin首先登录与POST请求,然后读取使用燃料库GET请求的值。

Android应用程序的相关部分:

val loggedIn = false
FuelManager.instance.basePath = "https://red2503.nl";
fun logIn(webPage: String, username: String, password: String) {
Fuel.post(
webPage,
listOf("username" to username, "password" to password)
).responseString { request, response, result ->
when (result) {
is Result.Failure -> {
val ex = result.getException()
Log.d("FAIL", ex.toString())
lock.unlock()
loggedIn = false
}
is Result.Success -> {
val data = result.get()
Log.d("SUCCESS", data.toString())
if (data.toString().contains("Login success.")) {
loggedIn = true
} else {
loggedIn = false
}
lock.unlock()
}
}
}
lock.lock() //wait for response
}
fun displayToast(text: String) {
val duration = Toast.LENGTH_LONG
val toast = Toast.makeText(applicationContext, text, duration)
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0)
toast.show()
}
fun readTemperatureHumidity(webPage: String) {
Fuel.get(FuelManager.instance.basePath + "/" + webPage)
.response { request, response, result ->
println(request)
println(response)
val (bytes, error) = result
if (bytes != null) {
println("[response bytes] ${String(bytes)}")
}
}
}
submitButton.setOnClickListener {
logIn("iot/login.php", /* USERNAME */, /* PASSWORD */)
if (loggedIn) {
readTemperatureHumidity("iot/app/index.php")
} else {
displayToast("Login failed. Check internet connection.")
}
}

我知道登录工作正常,因为登录的响应是"login success.&"。但是,当我在登录后将GET请求发送到app/index.php时,网站将我重定向到../index.html的登录表单,但我希望它能够回复值,因为登录成功了。我认为发生这种情况是因为会话ID没有在两个HTTP请求之间保持设置。我该如何解决这个问题?

我想我已经提供了关于网站和申请的所有相关信息。如果有不清楚的地方,请告诉我。

我必须存储第一个请求响应的cookie,并将其放在第二个请求中。请看这篇文章的答案:

在燃料请求中正确设置cookie

最新更新