PHP 总是创建一个新 session

标签 php apache session angular

我目前正在使用 Angular 2 和 PHP REST API 后端开发一个网站。当我开始使用 session 数据时,我发现它会在来自站点的每个请求之后创建一个新的单独 session 文件,而使用 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,它将按预期仅创建和使用一个 session 文件。

附加信息

我使用主机文件在 Apache 上设置了两个虚拟主机,如下所示:

127.0.0.1    api.stuff.dev
127.0.0.1    application.stuff.dev

PHP 版本 7.0.8

PHP.ini (仅限 session 相关的东西)

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>

最佳答案

检查您的浏览器是否接受 cookie。

PHP 使用 cookie 存储您的 session ID。

关于PHP 总是创建一个新 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39911463/

相关文章:

php - 使用 PHP 的谷歌分析 API v4。排序输出

php - (laravel 4) 更新配置文件信息//显示空值或已存储在表中的值?

java - 如何从 WebSocket 实现开始

java - 如何保持用户登录 session ?

c# - 设置 Session.Timeout 或将其添加到 web.config 之间有区别吗?

asp.net:单个 session 变量与保存在 session 中的对象

php - CodeIgniter 或 PHP 在表名前添加 "sq",引发错误

php - 如何在我的设置是 Windows 10 主机中的 Vagrant Ubuntu 16.06 的 Visual Studio Code 中配置 PHP 可执行文件

php - Apache 从 RAM 提供文件

java - 如何将Excel单元格值转换为字符串类型?在Excel中将单元格设置为文本类型不起作用