drc*_*uck 5 php session cookieless php-7 php-7.1
我无法确定这是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>
Run Code Online (Sandbox Code Playgroud)
在PHP 5.6.28和所有早期版本以及PHP 7.0.x中,配置选项url_rewriter.tags决定哪些标签会自动附加会话。缺省值为:
url_rewriter.tags="a=href,area=href,frame=src,input=src,form=,fieldset="
Run Code Online (Sandbox Code Playgroud)
http://php.net/manual/zh/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>
Run Code Online (Sandbox Code Playgroud)
但是现在我们转到PHP 7.0.13-它的配置与PHP 5相同,因此它具有:
url_rewriter.tags="a=href,area=href,frame=src,input=src,form=,fieldset="
Run Code Online (Sandbox Code Playgroud)
但是上述脚本在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>
Run Code Online (Sandbox Code Playgroud)
什么都没有重写。
在PHP 7.1中,有一个称为的新配置变量session.trans_sid_tags,可以完成相同的功能。在我的PHP 7.1.0实例中,我有:
session.trans_sid_tags="a=href,area=href,frame=src,form=" (default)
Run Code Online (Sandbox Code Playgroud)
这不在php.ini文件中,但是在PHPInfo中,默认值是我们得到的。
http://php.net/manual/zh-CN/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>
Run Code Online (Sandbox Code Playgroud)
错误地重写了命名的锚#place。其他一切都在工作。
帮助-我想知道PHP 7.1.0中是否仅缺少一个配置选项,或者这仅仅是PHP 7中尚未解决的错误。