2012-12-17 120 views
0

我遇到了一個我試圖創建的簡單登錄系統的問題。這裏是我的設置:PHP登錄腳本會話不存活

的index.php

<?php if(!isset($_SESSION['username'])){ 
session_start(); 
//present login form with action=login.php 
} else { 
//display actual page 
} 
?> 

的login.php

<?php 
if(!empty($_SESSION['username'])){ 
    echo $_SESSION['username']; 
} else { 
$username=$_POST['username']; 
$password=sha1($_POST['password']); 
$link=mysqli_connect("localhost","root","password","database",3306,"/tmp/mysql.sock"); 
$query="SELECT * FROM login WHERE `name`='".$username."' AND `passwordhash`='".$password."' LIMIT 1"; 
$result=mysqli_query($link,$query); 
if(mysqli_num_rows($result)==1){ 
      session_start(); 
    $_SESSION['username']=$username; 
    $row=mysqli_fetch_assoc($result); 
    $_SESSION['firstname']=$row['firstname']; 
    $_SESSION['lastname']=$row['lastname']; 
    echo "Username: ". $_SESSION['username']." Name: ".$_SESSION['firstname']." ".$_SESSION['lastname']; //this is just here as POC. If I redirect to index.php (using header()), it shows the login form (claims $_SESSION['username'] is unset). 
} 
} 
?> 

一次我登錄,它顯示了我的用戶名和姓氏和名字只是正常的login.php(不是數據庫問題)。但是如果我重定向到index.php,它會立即顯示登錄表單。有什麼問題? 編輯:即使添加session_start()login.php後,結果相同。

+1

您還必須調用'在session_start()'的所有文件。 –

+1

調用'session_start();'在使用'$ _SESSION'之前 – Musa

回答

2

製作的session_start()文件的第一行必須包含在上`login.php`使用會話變量

+0

謝謝!我沒有意識到需要在每個使用會話變量的文件中調用 - 在我看來,無論文件如何,會話都會持續下去。再次感謝。 – Aehmlo

+0

很高興我可以幫助確保檢查這個答案,如果它解決了你的問題 – Yamaha32088

+0

我會盡快讓我。我仍然有5分鐘,直到我可以標記答案。 – Aehmlo