如何在PHP 7.1中使trans_sid(无cookie会话)工作

时间:2017-07-07 22:42:49

标签: php session php-7 php-7.1 cookieless

我不知道这是PHP 7.0和7.1中的错误还是可修复的配置错误。我有一个应用程序多年来在PHP中使用无cookie会话非常成功。但是在PHP 7.0和PHP 7.1中,事情仍然存在。这是PHP脚本:

<?php
    ini_set('session.use_cookies', '0');
    ini_set('session.use_only_cookies',0);
    ini_set('session.use_trans_sid',1);
    session_start();
?>
<p><a href="index.php">Click This Anchor Tag!</a></p>
<p><a href="#place">Internal link</a></p>
<p>Our Session ID is: <?= session_id() ?></p>
<p>Our PHP Version is: <?= phpversion() ?></p>

在PHP 5.6.28以及所有早期版本以及PHP 7.0.x中,配置选项url_rewriter.tags决定哪些标记会自动附加会话。默认值为:

url_rewriter.tags="a=href,area=href,frame=src,input=src,form=,fieldset="

http://php.net/manual/en/outcontrol.configuration.php#ini.url-rewriter.tags

默认情况下,PHP 5.6.28中上述脚本的正确输出为:

<p><a href="index.php?PHPSESSID=aec2a7538bfe295d6a6c9ff70c42f8eb">Click This Anchor Tag!</a></p>
<p><a href="#place">Internal link</a></p>
<p>Our Session ID is: aec2a7538bfe295d6a6c9ff70c42f8eb</p>
<p>Our PHP Version is: 5.6.28</p>

但现在我们转向PHP 7.0.13 - 它的配置方式与PHP 5相同,因此它具有:

url_rewriter.tags="a=href,area=href,frame=src,input=src,form=,fieldset="

但PHP 7.0.13中上述脚本的输出是:

<p><a href="index.php">Click This Anchor Tag!</a></p>
<p><a href="#place">Internal link</a></p>
<p>Our Session ID is: a336e933e677c001ae8faf20b7158fb4</p>
<p>Our PHP Version is: 7.0.13</p>

什么都没改写。

在PHP 7.1中,有一个名为session.trans_sid_tags的新配置变量可以完成相同的任务。在我的PHP 7.1.0实例中,我有:

session.trans_sid_tags="a=href,area=href,frame=src,form=" (default)

这不在php.ini文件中,但是查看PHPInfo默认是我们得到的。

http://php.net/manual/en/session.configuration.php#ini.session.trans-sid-tags

在PHP 7.1中它几乎可以工作:

<p><a href="index.php?PHPSESSID=a17309afea8f2791078fc046cce5fa56">Click This Anchor Tag!</a></p>
<p><a href="#place/?PHPSESSID=a17309afea8f2791078fc046cce5fa56">Internal link</a></p>
<p>Our Session ID is: a17309afea8f2791078fc046cce5fa56</p>
<p>Our PHP Version is: 7.1.0</p>

错误地重写了命名锚#place。其他一切都在发挥作用。

帮助 - 我想知道PHP 7.1.0中是否只有一个配置选项缺失,或者这只是PHP 7中尚未运行的错误。

0 个答案:

没有答案