PHP 会话变量和身份验证

PHP Sessions Variables & Authentication

我有两个页面需要在它们之间传递会话信息。这是第一页。

<?php
session_start();
echo session_id()."<br>";
echo $_SESSION['test']."<br>";

第二页。

<?php
session_start();
echo session_id()."<br>";
$_SESSION['test'] = 'test';
echo $_SESSION['test'];

第二页位于不同的目录(同一域)中,并且启用了 Windows 身份验证。第一页使用匿名身份验证。从输出中我可以看到会话 ID 是相同的,但是第一页没有回显第二页中设置的测试变量。

我 运行 PHP 在 Server 2012 R2 上的 IIS 8.5 中。

感谢任何帮助。

澄清一下,我先调用第二页,第一页不会显示变量。

您需要先用一个值初始化变量,然后再使用它。

First run page2.php so, that value of $_SESSION['test'] is set to test 
using $_SESSION['test'] = 'test';
Now, run page1.php there you can see the value of $_SESSION['test'] 
using echo $_SESSION['test']."<br>";

您也可以按照这些步骤以简单的方式使用会话,这样您就不必一次又一次地执行 session_start()

1. config.php having session_start();
2. page1 having include_once('config.php');
   echo session_id()."<br>";
   echo $_SESSION['test']."<br>";
3. page2.php having include_once('config.php');
   echo session_id()."<br>";
   $_SESSION['test'] = 'test';
   echo $_SESSION['test'];

尝试在第一页关闭您的会话,可能在调用第二页时您的会话文件仍处于打开状态,因此您看不到数据。尝试将 session_write_close() 添加到调用的第一个页面。

http://php.net/manual/en/function.session-write-close.php

问题出在会话保存路径的权限上。我将路径更改为两个目录都可以写入的位置并且它有效。