繁体   English   中英

第二个 php 文件中的 $_SESSION 变量错误

[英]$_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM