HTTP 身份验证会话


HTTP authentication session

>我有一个简单的页面,用户通过http身份验证登录聊天室。我需要做的是通过会话将他们的登录名作为用户名传递到他们将在房间内访问的其他页面。这是编码,假设它出现在他们登录的页面上,我必须初始化和设置会话。

<? 
session_start();
 if (isset($_SERVER['PHP_AUTH_USER']))
$_SESSION['username'] = $_SERVER['PHP_AUTH_USER'];
?>
<html>
<head>
<title>TESTING</title>
</head>
<body background="http://testsite.com/example/entry2a.png">
<body text="#FFFFFF" bgcolor="#000000" link="#808080" vlink="#808080" alink="#808080">
<font face="verdana,arial,sans-serif">
<center><br>
<table border="0"><tr><td>
<table border="0">
  <tr>
    <td>
      <table border="0" cellspacing="0" cellpadding="0">
      <form action="http://testsite.com/rooms/enter/thisroom" method="POST" target="_top"
      <tr>
        <td>
          <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td height="20" align="right"><font size="-1">Screen Name:&nbsp;</font></td>
              <td height="20"><input name="USER" value="Tester"></td>
            </tr>
        </td>
          </table>
        <td width="4">&nbsp;</td>
        <td>
          <table border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td height="20" align="right"><font size="-1">Entrance:&nbsp;</font></td>
              <td height="20"><input name="SAYS" value="Enters the room..."></td>
            </tr>
        </td>
          </table>
        <td width="4">&nbsp;</td>
        <td>
          <table border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td height="20" align="right"><font size="-1">History:&nbsp;</font></td>
              <td height="20"><input name="HISTORY" value="20" size=2></td>            </tr>
        </td>
          </table>
        <td width="4">&nbsp;</td>
        <td>
          <table border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td height="20" align="right"><font size="-1">No Pics:&nbsp;</font></td>
              <td height="20"><input name="NOPIC" value="1" type="checkbox" checked></td>
            </tr>
            <tr>
              <td height="20" align="right"><font size="-1">Save name:&nbsp;</font></td>
              <td height="20"><input type="checkbox" name="SAVE" value="1"></td>
            </tr>
          </table>
        </td>
        <td width="4">&nbsp;</td>
        <td>
          <table border="0" cellspacing="0" cellpadding="0">
              <td height="20" colspan=3>
             <input type=hidden name="ACTION" value="says to">
            <input type=hidden name="WHOTO" value="ALL">
            <input type=submit value="Click to Enter if 18+"></td>
            </tr>
          </table>
      </form>
      </table>
      </table>
    </td>
  </tr>
</table>
</td></tr></table>
</body>
</html>

然后在随后的页面上,我有:

<?php
if (session_id() == "")
{
   session_start();
}
?>

在每个页面的顶部(尽管只有一个真正需要会话名称才能从用户文件夹中提取目录信息以通过 php 填充下拉列表)。在随后的页面上,我可以找到目录,但我找不到用户文件夹,大概是因为会话名称没有传递,我不太确定我错过了什么。

session_start — 启动新会话或恢复现有会话

http://php.net/manual/en/function.session-start.php

编辑:

<?php
if (session_id() == "")
{
   session_start();
}
?>

这将永远不会恢复已创建的会话。

CBroe 是对的,session_id() 在 session_start() 之前总是为空的,它不会自行解析请求session_id,因此代码无论如何都会被执行。

鉴于涉及子域和iframe,也许答案与以下方面有关:允许 php 会话转移到子域