2014-03-03 63 views
1

我有一個學校項目,我試圖使用會話變量來保存日誌ID,但我似乎無法訪問文件間的會話變量。我對會話相對比較陌生,但是他們已經讓他們在我用於此項目的同一臺服務器上運行更簡單的應用程序。該程序的工作原理如下:訪問多個文件中的PHP會話變量

getData.php是用戶輸入其ID和密碼的登錄形式。 front.php從這個表單收集數據並使用php curl將其轉發到另一個組成員的服務器。由於這不是我的一部分,所以我沒有這個代碼。 在訪問數據庫之後,來自數據庫的信息將被轉發回給我,同樣使用curl並將其格式化爲tList.php中的表格。

問題是會話變量似乎無法在我的服務器上的文件之間訪問。我試圖完成的確切目標是訪問我在tList.php的front.php中創建的會話變量,但即使我將它們分配在front.php中,變量也未設置。

任何幫助將不勝感激。謝謝。

訪問getdata.php:

<?php 

session_start(); 

?> 

<html> 
<head> 

    <link rel="stylesheet" type="text/css" href="../css/style.css"> 
    <link rel="stylesheet" type="text/css" href="../css/b.css"> 
    <link href="../css/test.css" rel="stylesheet" type="text/css"> 

</head> 

<body> 

<script type="text/javascript"> 

    function status_toggle() { 

     if(document.getElementById('stud').checked) { 

      document.getElementById('sl').style.display='block'; 
      document.getElementById('tl').style.display='none'; 

     } else if(document.getElementById('teach').checked) { 

      document.getElementById('sl').style.display='none'; 
      document.getElementById('tl').style.display='block'; 

     } 
    } 

</script> 

<!-- Status Selection --> 

<form name="radio" class="nav selection_form" action="" align="center"> 

    <div align="center" class=""> 
     Are you a <br> 
     Student <input id="stud" type="radio" name="status" value="student" onclick="javascript:status_toggle();" checked> 
     &nbsp&nbsp&nbsp or &nbsp&nbsp&nbsp 
     Teacher <input id="teach" type="radio" name="status" value="teacher" onclick="javascript:status_toggle();"> 
    </div> 

</form> 

<!-- Student Form --> 

<form id="sl" name="student_login" action="front.php" class="input-block my_form" autocomplete="on" method="post"> 

    <div align="center"> 
     Username: <input type="text" name="txtUCID" size="15" /><br /> 
     Password: <input type="password" name="txtPasswd" size="15" /><br /> 
      <p><input class="btn-red" id="submit" type="submit" value="Login" /></p> 
    </div> 

</form> 

<form style="display:none" id="tl" name="teacher_login" action="front.php" class="input-block my_form" autocomplete="on" method="post"> 

    <div align="center"> 
     Username: <input type="text" name="teacherTxtUCID" size="15" /><br /> 
     Password: <input type="password" name="teacherTxtPasswd" size="15" /><br /> 
      <p><input class="btn-grn" id="submit" type="submit" value="Login" /></p> 
    </div> 

</form> 

<div align="center" class="alert_box input-block my_form"> 

     <h2 align="center" type="text" id="local_db"> change me!</h2> 
     <h2 align="center" type="text" id="njit_db"> change me!</h2> 

</div> 

</body> 

</html> 

front.php:

<?php 
session_start(); 

$un = $_POST["txtUCID"]; 
$pw = $_POST["txtPasswd"]; 

$_SESSION['id'] = $un; 

$curl = curl_init('web.njit.edu/~mc332/cs_490/loginSTD.php'); 

$postData= array(

    'txtUCID' => $un, 
    'txtPasswd' => $pw 

); 

curl_setopt_array($curl, array(

    CURLOPT_RETURNTRANSFER => 0, 
    CURLOPT_POST => true, 
    CURLOPT_POSTFIELDS => $postData, 
    CURLOPT_FOLLOWLOCATION => 1, 
    CURLOPT_MAXREDIRS => 5 

)); 

echo $_SESSION['id']; 

$result = curl_exec ($curl); 

curl_close ($curl); 

tList.php

<?php 
session_start(); 
?> 

<html> 

<head> 
    <link rel="stylesheet" type="text/css" href="../css/style.css"> 
    <link rel="stylesheet" type="text/css" href="list.css"> 
</head> 

<body> 

<div class="header"> 
    Your Tests 
</div> 

<div class="list-view"> 

    <?php 
     echo "SV: ".$_SESSION['id']; 

     $result = $_POST['tests']; 

     echo "<table>"; 
     echo "<tr><th>Test ID</th><th>Test Name</th><th>Attempted</th><th>Score</th><th> Attempt Test </th></tr>"; 

     $json = json_decode($result); 

     $i = 0; 
     while($i < count($json)) { 

      $id = $json[$i][0]; 
      $name = $json[$i][1]; 

      $tId = $id; 

      echo "<tr> <td> $id </td> <td> $name </td> <td> ? </td> <td> ?/100 </td> <td> <form method=\"post\" action=\"goToTest.php\" id=\"form$tId\"><button type=\"submit\">Take Test</button></input><input type=\"text\" style=\"display: none;\" name=\"poop\" value=\"$tId\"></input></form></td> </tr>"; 

      $i++; 
     } 

     echo "</table>"; 

     echo "end"; 

    ?> 

</div> 

</body> 

</html> 

這裏是工作的應用程序:

文件1:

<?php 
session_start(); 

$_SESSION['test'] = "test"; 

echo "<a href=\"t2.php\">Click</a>"; 

?> 

文件2:

<?php 
session_start(); 

echo $_SESSION['test']; 

?> 

回答

1

的session_start()函數必須出現在標記之前

<?php session_start(); ?> 

<html> 
<body> 

</body> 
</html> 

http://www.w3schools.com/php/php_sessions.asp

試試這個,以確保你逝去的有效值到會話變量。

<?php 
    session_start(); 
    if (!empty($_POST["txtUCID"])){ 
     $_SESSION['id'] = $_POST["txtUCID"]; 
    } else { 
    $_SESSION['id'] = 'no value set'; 
    } 
echo $_SESSION['id']; 
+0

session_start()函數出現在所有適當位置的標記之前。它是否必須在< - !Doctype html - >之前? – Mike

+1

是的。它必須在任何html之前,包括空白 –

+0

不幸的是,這並沒有解決問題。這兩個真正重要的文件將session_start()作爲第一行代碼(當然在之內)。我剛剛在第一個文件中打開了會話,看看它是否可行,但我確實改變了它的說法。 – Mike