【问题标题】:PHP's always creating a new sessionPHP总是创建一个新会话
【发布时间】: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


【解决方案1】:

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

PHP 使用 cookie 存储您的会话 ID。

【讨论】:

  • 它确实接受 cookie,在 IE 上也试过同样的结果
猜你喜欢
  • 2014-05-25
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多