【发布时间】:2023-04-03 19:35:01
【问题描述】:
我目前正在使用 Angular 2 和 PHP REST API 后端开发一个网站。当我开始使用会话数据时,我发现它会在站点的每个请求之后创建一个新的单独会话文件,而使用 POSTMAN 调用我的 API 时不会发生这种情况。
以下是我的index.php
<?php
session_start();
error_reporting(E_ALL); ini_set('display_errors', true);
if (!is_writable(session_save_path()) ) {
echo 'Session save path "'.session_save_path().'" is not writable!';
}
require '../vendor/autoload.php';
$settings = require __DIR__ . '/../src/settings.php';
$app = new \Slim\App($settings);
// Register dependencies
require __DIR__ . '/../src/dependencies.php';
// Register routes
require __DIR__ . '/../src/routes/routes.php';
$app->run();
exit();
?>
例如,在点击登录 6 次后,我在 xampp/tmp 文件夹中得到类似的东西:
sess_9tehhc94n54ra6rpq2j55b0b70
sess_84u3blees7ue2la3nckn97f4h5
sess_au79phq7k1umjbeambia4smjf4
sess_bm5658c44n0d0s452tm9g7mij6
sess_eac14a6sths5ars0eltc3g13e4
sess_m3mk9ms4f2j12jqh4hvh8gsch1
但是,如果我使用 POSTMAN 调用我的 REST API,它只会按预期创建和使用一个会话文件。
附加信息
我在 Apache 上使用 hosts 文件设置了两个虚拟主机,如下所示:
127.0.0.1 api.stuff.dev
127.0.0.1 application.stuff.dev
PHP版本7.0.8
PHP.ini (仅限与会话相关的内容)
session.save_handler=files
session.save_path="C:\xampp\tmp"
session.use_strict_mode=0
session.use_cookies=1
session.use_only_cookies=1
session.name=PHPSESSID
session.auto_start=0
session.cookie_path=/
session.cookie_domain=
session.cookie_httponly=
session.serialize_handler=php
session.gc_probability=1
session.gc_divisor=1000
session.gc_maxlifetime=1440
session.referer_check=
session.entropy_length=0
session.cache_limiter=nocache
session.cache_expire=180
session.use_trans_sid=0
session.hash_function=0
session.hash_bits_per_character=5
httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin admin@localhost.com
DocumentRoot "E:\applications\stuff"
ServerName application.stuff.dev
ServerAlias application.stuff.dev
<Directory "E:\applications\stuff">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@localhost.com
DocumentRoot "E:\applications\API REST"
ServerName api.stuff.dev
ServerAlias api.stuff.dev
<Directory "E:\applications\API REST">
AllowOverride All
Require all granted
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
</Directory>
</VirtualHost>
【问题讨论】:
-
有趣。你能发布相关会话
php.ini行吗? -
没问题,刚刚编辑过
-
使用浏览器调试器并检查请求/响应标头。确保接受 cookie 标头,然后将 cookie 发回。 PHP 创建新会话的唯一情况是调用 session_start() 并且请求中不存在会话 cookie。
-
我在响应头上得到了这个:Set-Cookie:PHPSESSID=2s99m6ilt5mt8gfm6jp1ith7s6; path=/ 但是请求头上没有 cookie 相关的东西
-
你找到这个@Rikku121的答案了吗?
标签: php apache session angular