![](/img/trans.png)
[英]SESSION variable in while loop not being sent correctly to second .php file
[英]$_SESSION variable error in second php file
我减少了两个文件中的代码以尝试弄清楚发生了什么。
在我的第一个文件 loginuser.php 中,我运行以下几行:
<?php
session_start();
$_SESSION['user_id'] = "test";
// more code follows; nothing else that involved user id or session
为了仔细检查确实设置了 $_SESSION 变量,我运行了以下修改后的方法:
<?php
session_start();
$_SESSION['user_id'] = "test";
$response['success'] = false;
$response['message'] = $_SESSION['user_id'];
echo json_encode($response);
exit;
当 $response['success'] 为 false 时,打印消息。 所以此时我知道确实设置了 $_SESSION 变量并且我得到了身体响应。
在我的第二个文件 addrelease.php 中,我运行以下行来检查我是否在执行任何其他操作之前看到 session 变量:
<?php
session_start();
$response['message'] = $_SESSION['user_id'];
// more code would follow but again i will force message to pop and exit
$response['success'] = false;
echo json_encode($response);
exit;
如果响应中没有提供正文(我正在使用改造),应用程序将吐司“错误,无响应”,这正是发生的情况。 鉴于此,我知道 addrelease.php 甚至没有响应响应。
为了证实我对 $_SESSION 变量正在发生某些事情的怀疑,我将 addrelease.php 中的 $_SESSION['user_id'] 替换为“test2”,现在我得到了一个带有我强制的消息的正文。
我发现的大多数帖子似乎通过确保 session_start() 是第一个被调用的东西并加倍检查 session_save_path 来解决他们的问题。 我已经看过这两个,但找不到任何问题。
希望有人能帮助我,在此先感谢!
PS 这对我来说是全新的,所以如果我在某个地方犯了一个非常基本的错误,请原谅。
您究竟如何调用 addrelease.php 脚本? 听起来像是发出背景(?)请求的任何东西,可能没有发送 session id。
这是我理解它发生的方式
NewReleaseActivity.java
Call<ReleaseModel> releaseModelCall = apiInterface.addRelease(
owner.trim(),
binding.textInputEditTrackName.getText().toString().trim(),
binding.textInputEditArtist.getText().toString().trim(),
label.trim(),
binding.textInputEditISRC.getText().toString().trim(),
binding.textInputEditUPC.getText().toString().trim(),
releaseDate,
TextUtils.join(",", buttonStates),
percentage
);
ApiInterface.java
@FormUrlEncoded
@POST("addrelease.php")
Call<ReleaseModel> addRelease(@Field("owner") String owner,
@Field("track_name") String trackName,
@Field("artist") String artist,
@Field("label") String label,
@Field("isrc") String isrc,
@Field("upc") String upc,
@Field("release_date") LocalDate date,
@Field("button_states") String buttonStates,
@Field("release_progress") float releaseProgress);
附加上下文
我的目标是让 session 变量与我准备好的语句中的所有者绑定:
$sql = "INSERT INTO releases (owner, track_name, artist,
label, isrc, upc,
release_date, button_states, progress) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt->bind_param("ssssssssd",
/*$_POST["owner"]*/ $_SESSION['user_id'],
$_POST["track_name"],
$_POST["artist"],
$_POST["label"],
$_POST["isrc"],
$_POST["upc"],
$_POST["release_date"],
$_POST["button_states"],
$_POST["release_progress"]
);
只是为了给这篇文章一个答案,Oliver 的评论提到我应该使用 CookieJar,这似乎解决了我的问题,即让 session 变量跨 .php 文件工作。
然后我遇到了一个问题,我的 CookieJar 实现不是持久的,但是我也找到了解决这个问题的方法,你可以在这里阅读它。
谢谢大家的帮助。
echo session_id();
启动 session 后,上面的值对于两个页面应该是相同的。 如果不是,则很可能是您的 .htaccess 文件存在一些问题,其中某些规则正在影响 session。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.