【问题标题】:$_SESSION is always null$_SESSION 始终为空
【发布时间】:2021-06-24 04:20:29
【问题描述】:

我同时有 2 个运行时环境:

  • 前端:Angular JS (localhost:4401) 使用 VS Code (ng serve) 运行
  • API:PHP 使用附加到数据库的 WAMP (localhost) 运行。

对于从我的前端到我的 API 的每次调用,我都会像这样调用会话开始:

(来自每个 *.php 页面中包含的“session.php”)

session_start();

// Make sure we have a canary set
if (!isset($_SESSION['canary'])) {
    session_regenerate_id(true);
    $_SESSION['canary'] = [
        'birth' => time(),
        'IP' => $_SERVER['REMOTE_ADDR']
    ];
}

我注意到我的 $_SESSION 变量在执行代码时始终具有“null”值,并且它无法检索最初创建的会话(目录:wamp64\tmp)。

我从 Angular 调用的示例:

  checkLoginStatus(){
    // Used to check if stay logged in cookie is set - autologin...
    return this._http.get<loginResponse>(environment.api+"api/check_autologin.php").pipe(catchError(this.handleError))
  }

你有什么想法吗? 提前致谢。

【问题讨论】:

  • session_start();之前的PHP代码发生了什么
  • 首先,感谢您的回答。 session_start(); 是每个 .php 服务的第一行。每个页面以include_once ("config/session.php"); 开头,session.php 以session_start(); 开头
  • 我也注意到$_SERVER也是空的……经过研究,感觉问题出在“全局变量”,但不知道如何保证。
  • 我假设您使用的是http:// 而不是file:///
  • 您的所有超全局变量似乎都不可能为空或为空 - 您在哪里寻找这些/生成输出?

标签: php api session wamp


【解决方案1】:

我仍在寻找解决方案...但我已经测试了一些曲目: 我试图安装 uwamp 而不是 wamp ...同样的问题。对我的 API 的每次调用都会生成一个新会话,但我不能只获得一个会话,我有与调用应用程序一样多的会话。我的会话目录充满了使用不同调用创建的会话文件。 我认为最好的方法是分享我的 phpinfo()。我已经尝试更改一些参数(特别是 cookie/会话的过期时间) 非常感谢

会议
  • 注册的保存处理程序:文件用户
  • session.auto_start:关闭
  • session.cache_expire : 180
  • session.cache_limiter:无缓存
  • session.cookie_domain : 没有值
  • session.cookie_httponly:没有价值
  • session.cookie_lifetime:0
  • session.cookie_path:/
  • session.cookie_samesite:没有价值
  • session.cookie_secure:1
  • session.gc_divisor:1000
  • session.gc_maxlifetime:1440
  • session.gc_probability:1
  • session.lazy_write:开启
  • session.referer_check:没有值
  • session.save_handler:文件
  • session.save_path : c:/wamp64/tmp
  • session.serialize_handler:php
  • session.sid_bits_per_charactersession.sid_length:26
  • session.upload_progress.cleanup:开启
  • session.upload_progress.enabled:开启
  • session.upload_progress.freq : 1%
  • session.upload_progress.min_freq : 1
  • session.upload_progress.name:PHP_SESSION_UPLOAD_PROGRESS
  • session.upload_progress.prefix :upload_progress_
  • session.use_cookies:1
  • session.use_only_cookies:1
  • session.use_strict_mode:0
  • session.use_trans_sid:0
  • 【讨论】:

    • 有一个空会话是正常的,php使用cookie来识别每个用户保存在localhost/yourapi下的cookie基本上是你的php服务器,但是在你的浏览器中你正在使用另一个服务器localhost:4401是另一个没有设置cookie的服务器,所以每次调用session start时,php都会去寻找他的cookie,找不到,然后他创建一个新的session,在localhost/yourapi中设置一个新的cookie,所以你'让事情变得复杂,你应该使用 Jwt 来管理你自己的会话
    • 谢谢,你是对的。我的代理有问题,所以行为与您描述的完全一样。
    • 不客气,如果您想要更多关于使用 php-JWT 的解释,请告诉我,然后我可以在下面发布详细的答案
    猜你喜欢
    • 1970-01-01
    • 2017-07-31
    • 2019-07-18
    • 2019-08-18
    • 2011-12-29
    • 2019-07-02
    • 2019-05-04
    • 1970-01-01
    • 2011-05-04
    相关资源
    最近更新 更多