2013-03-22 52 views
2

我通過會話傳遞用戶變量。它在本地主機上正常工作,但一旦在Web服務器上出現奇怪的事情。雖然在服務器上的PHP會話問題,但在本地主機上沒有問題

登錄後,會話變量的工作原理應該是......直到您點擊三頁左右,並突然出現POOF!

注意「Welcome, jordan.」而不是「Welcome, .」也是左上角。

會議功能: http://imageshack.us/photo/my-images/32/loggedins.png/

會議噗! http://imageshack.us/photo/my-images/515/loggedinno.png/

登錄/創建會話變量代碼:

<?php 
     if (!isset($_SESSION['user'])) 
     { 
     if (isset($_POST['user'])) 
     { 
     $user = sanitizeString($_POST['user']); 
     $pass = sanitizeString($_POST['pass']); 
     if (preg_match($txtMatch,$user)) 
     { 
     if ($user == "" || $pass == "") 
     { 
     $error = "Please enter all required fields"; 
     } 
     else 
     { 
     $query = "SELECT * FROM gtmembers WHERE user='$user'"; 
     $result = queryMysql($query); 
     $rank = mysql_result($result, 0, 'rank'); 
     if (!mysql_num_rows($result)) 
     { 
     $error = "Username does not exist."; 
     } 
     else 
     { 
     $getPass = mysql_result($result, 0, 'pass'); 
     $salt = substr($getPass, 0, 64); 
     $hash = $salt . $pass; 
     for ($i = 0; $i < 100000; $i++) 
     { 
     $hash = hash('sha256', $hash); 
     } 
     $hash = $salt . $hash; 
     if ($hash == $getPass) 
     { 
     if ($rank != "Banned") 
     { 
     $userLow = strtolower($user); 
     $_SESSION['user'] = $userLow; 
     $_SESSION['rank'] = $rank; 
     echo <<<_END 
     <script type="text/javascript"> 
     window.location.href='index.php'; 
     </script> 
     _END; 
     echo "Successfully logged in. Click <a href='index.php'>here</a> to continue."; 
     } 

頁眉代碼:

 <?php //gtheader.php 
     session_start(); 
     include_once 'gtfunctions.php'; 
     $loggedIn = FALSE; 

     if (isset($_SESSION['user'])) 
     { 
     $user = $_SESSION['user']; 
     if ($user) echo "Current User: $user<br />"; 
     else echo "Current User: None<br />"; 
     $rank = $_SESSION['rank']; 
     $loggedIn = TRUE; 
     echo "is set SESSION['user']? Yes"; 
     } 
     else echo "is set SESSION['user']? No"; 

     echo "<div id='header'><a class='header' href='index.php'> <h1 id='headerTitle'>$appname</h1></a>"; 
     if ($loggedIn == TRUE) 
     { 
     $query = "SELECT * FROM gtmessages WHERE recip='$user' AND status='0'"; 
     $result = queryMysql($query); 
     if (mysql_num_rows($result) == 0) $num = ""; 
     else $num = "[".mysql_num_rows($result)."]"; 
     if ($rank == 'Owner' || $rank == 'Admin') 
     { 
     echo "Welcome, <a class='header' href='gtmembers.php?view=$user'>$user</a><a  class='header' href='gtmessage.php'>$num</a>. [<a class='header'  href='gtlogout.php'>Logout</a>] | <a class='header' href='gtadmin.php'>Admin</a><br />"; 
     } 
     else 
     { 
     echo "Welcome, <a class='header' href='gtmembers.php?view=$user'>$user</a><a  class='header' href='gtmessage.php'>$num</a>. [<a class='header'  href='gtlogout.php'>Logout</a>]<br />"; 
     } 
     } 
?> 
+4

你是否在任何地方調用session_start?可能是 – 2013-03-22 04:41:13

+0

@AdamPlocher,否則它根本無法工作。 – 2013-03-22 04:41:57

+2

不正確。 Php.ini具有以下設置:session.auto_start = 1 – 2013-03-22 04:42:18

回答

1

解決的頂部調用session_start()

這裏的問題是Host Gator註冊全局變量。所以,因爲我使用$ user,並且$ _SESSION ['user']被註冊,它會被覆蓋。

我在所有的文件改變$ _SESSION [ '用戶']到$ _SESSION [ 'MYUSER']

感謝您的幫助解決了該問題。

1

如果它工作在一個環境中,而不是其他的,我猜你的php.ini有session.auto_start = 1在工作的環境中。最佳做法是始終在頁面頂部撥打session_start(),而不要依賴php.ini進行正確設置。這應該可以在任何環境下工作。

+0

在session_start是在代碼工作但沒有出現在文本。查看'header.php'的頂部 – user2058050 2013-03-22 04:44:40

0

必須在頁面

gtheader.php

<?php 
    session_start(); 
    include_once 'gtfunctions.php'; 
    $loggedIn = FALSE; 
    ..... 
+0

已修復且仍然損壞。不是問題。 – user2058050 2013-03-22 04:58:14

相關問題