【问题标题】:Other session in PHP applicationPHP 应用程序中的其他会话
【发布时间】:2019-01-21 04:48:58
【问题描述】:

我的会话有一个奇怪的问题... 我在 htaccess 中创建了带有重定向的 MVC php 应用程序。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !/Public/
RewriteRule ^(.*)$ /Public/$1 [L]

和公共目录中的 htaccess:

Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

在默认api index.php(url:domain.com/offer或domain.com/gallery)会话中正常工作

<?php print_r($_SESSION); ?>
//result: ARRAY ( [TEST] => TRUE )

<?=session_id()?>
//result: 6a5d103581340500d75b76c47f335d4e

但是!如果我使用网址:domain.com/ajaxFilePHP/signIn.php 会话无法正常工作...

<?php print_r($_SESSION); ?>
//result: Array( [IL] => 1 [NAME] => admin [LID] => 1 )

<?=session_id()?>
//result: 

我检查了ajax和客户端连接是一样的。

它不是我的服务器...在我的 PC 和我的服务器中,api 工作正常...php ini 中的会话配置几乎相同...

我的服务器:

Cookie - PHPSESSID=....
HTTP_COOKIE - PHPSESSID=...

session.cookie_httponly - no value
session.gc_divisor  - 1000
session.sid_bits_per_character - 5
session.sid_length - 26

其他服务器:

Cookie - no entry in ini
HTTP_COOKIE - no entry in ini

session.cookie_httponly - 0
session.gc_divisor  - 100
session.sid_bits_per_character - 4
session.sid_length - 32

有人可以帮忙吗?

编辑: 我有 session_start();在 ajaxFilePHP 目录中的每个文件中

<?php 
session_start();
require_once realpath(dirname(__FILE__)."/../../App/Core/DataBase/DBinit.php");
if(isset($_POST['name']) && isset($_POST['pass'])){
    $l = new LoginDB();
    exit($l->Login($_POST['name'], $_POST['pass']));
}
exit('100');

EDIT2:

主文件:

session_status();
//return code: 2

ajaxPhp文件:

session_status();
//return code: 1

【问题讨论】:

  • 在任何代码中都没有错误检查。您没有告诉我们是否启用了错误日志记录,也没有告诉我们日志中的内容。您还没有告诉我们上面缺少的 cookie 配置是否使用默认值。您还没有告诉我们定义 cookie 的响应标头是什么。您只是告诉我们它“无法正常工作”——我们不知道这意味着什么。

标签: php .htaccess session web php-ini


【解决方案1】:

如果你想使用 php session 确保你的文件需要 php session,你需要在顶部添加:session_start(); 否则你不会从 session 数组中得到任何结果,如果你有共同的 header.php 是一个好的做法比如在顶部添加session_start();

【讨论】:

  • 我有 session_start();在主 php 文件和 /ajaxFilePHP/ 中的每个文件中
  • 您是否尝试检查会话是否开启?像 echo session_status();也可能是您的会话 cookie 的生命周期很短
  • session_status() 在 main 中返回代码 2。 session_status() 在 ajaxPhpFile 中返回代码 1
  • 这意味着您的会话未启动,或者可能是您的代码中有一些检查阻止了 session_start();
  • 不,因为它会输出 session_status() = 0,你的代码输出 1,这意味着 session_start 丢失或会话 cookie 时间太短或者你有 session_regenerate_id 的地方也会弄乱你的会话设置
猜你喜欢
  • 1970-01-01
  • 2017-03-19
  • 2017-01-27
  • 2013-01-05
  • 2014-10-09
  • 2017-12-19
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多