2013-04-04 102 views
0

我有一個login.php文件,在有效的登錄後,它似乎不會啓動會話或將任何信息存儲在會話數組中?任何幫助,將不勝感激。謝謝。login.php不啓動會話或設置陣列

<?php 
include_once 'accounts/db.php'; 
include_once 'accounts/dbfunctions.php'; 

$err = array(); 

foreach($_GET as $key => $value) { 
    $get[$key] = filter($value); //get variables are filtered. 
} 

if ($_POST['doLogin']=='Login') 
{ 

foreach($_POST as $key => $value) { 
    $data[$key] = filter($value); // post variables are filtered 
} 


$user_email = $data['usr_email']; 
$pass = $data['pwd']; 


if (strpos($user_email,'@') === false) { 
    $user_cond = "user_name='$user_email'"; 
} else { 
     $user_cond = "user_email='$user_email'"; 

} 


$result = mysql_query("SELECT `id`,`pwd`,`full_name`,`approved`,`user_level` FROM users WHERE 
      $user_cond 
      AND `banned` = '0' 
      ") or die (mysql_error()); 
$num = mysql_num_rows($result); 

    // Match row found with more than 1 results - the user is authenticated. 
    if ($num > 0) { 

    list($id,$pwd,$full_name,$approved,$user_level) = mysql_fetch_row($result); 

    if(!$approved) { 
    //$msg = urlencode("Account not activated. Please check your email for activation code"); 
    $err[] = "Account not activated. Please check your email for activation code"; 

    //header("Location: login.php?msg=$msg"); 
    //exit(); 
    } 

     //check against salt 
    if ($pwd === PwdHash($pass,substr($pwd,0,9))) { 
    if(empty($err)){    

    // this sets session and logs user in 
     session_start(); 
     session_regenerate_id(true); //prevent against session fixation attacks. 

     // this sets variables in the session 
     $_SESSION['user_id']= $id; 
     $_SESSION['user_name'] = $full_name; 
     $_SESSION['user_level'] = $user_level; 
     $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); 

     //update the timestamp and key for cookie 
     $stamp = time(); 
     $ckey = GenKey(); 
     mysql_query("update users set `ctime`='$stamp', `ckey` = '$ckey' where id='$id'") or die(mysql_error()); 

     //set a cookie 

     if(isset($_POST['remember'])){ 
        setcookie("user_id", $_SESSION['user_id'], time()+60*60*24*COOKIE_TIME_OUT, "/"); 
        setcookie("user_key", sha1($ckey), time()+60*60*24*COOKIE_TIME_OUT, "/"); 
        setcookie("user_name",$_SESSION['user_name'], time()+60*60*24*COOKIE_TIME_OUT, "/"); 
        } 
      header('Location: http://www.example.com') ; 
     } 
     } 
     else 
     { 
     //$msg = urlencode("Invalid Login. Please try again with correct user email and password. "); 
     //$err[] = "Invalid Login. Please try again with correct user email and password."; 
     header("Location: index.html?p=problem1"); 
     } 
    } else { 
     header("Location: index.html?p=problem2"); 
     //$err[] = "Error - Invalid login. No such user exists"; 
     }  
} 



?> 
<script type="text/javascript" src="jquery/jquery.validate.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
    $("#logForm").validate(); 
    }); 
    </script> 
<?php 
     /******************** ERROR MESSAGES************************************************* 
     This code is to show error messages 
     **************************************************************************/ 
     if(!empty($err)) { 
     echo "<div class=\"msg\">"; 
     foreach ($err as $e) { 
     echo "$e <br>"; 
     } 
     echo "</div>";  
     } 
     /******************************* END ********************************/  
     ?> 
<div> 
<?php 
echo "session user id " . $_SESSION['user_id']; 
echo "session id" . $sess_user_id; 
echo "cookie id" . $cook_user_id; 
echo "Session A " . $test1; 
Print_r ($_SESSION); 
$sid = session_id(); 
if($sid) { 
    echo "Session exists!" . session_id(); 
} else { 
    echo "NOTHING!"; 
} 
echo $_SESSION['user_name']; 
echo $_COOKIE['user_id']; 
echo $_COOKIE['user_key']; 
?> 
<a id="11" href="#colorbox" class="Link">Login</a> 
</div> 
<div style='display:none'> 
<div id="colorbox"> 
    <div id="LoginBox"> 
    <form action="login.php" method="post" name="logForm" id="logForm"> 
     <div class="Fields"> 
     <div id="userName">UserName:</div> 
     <input name="usr_email" type="text" class="required" size="25"> 
     </div> 
     <div class="Fields" style="padding-top:5px;"> 
     <div id="passWord">Password:</div> 
     <input name="pwd" type="password" class="required password" size="25"> 
     </div> 
     <div class="Fields" style="padding-top:5px;"> 
     <input name="remember" type="checkbox" id="remember" value="1"> 
     Remember me</div> 
     <div class="Fields" style="padding-top:5px;text-align:center;"> 
     <input name="doLogin" type="submit" id="doLogin3" class="button" value="Login"> 
     </div> 
    </form> 
    <div id="forgotPasswordLink"> 
    <a class="sitelink" id="colorboxForgot" href="forgot.php">Forgot Password</a></div> 
    </div> 
</div> 
</div> 

現在登錄後,我看到網址的index.html?P =問題,而不是http://www.example.com

以下回聲是空的,所以我認爲,這意味着任何信息進入會話陣列

<?php 
echo "session user id " . $_SESSION['user_id']; 
echo "session id" . $sess_user_id; 
echo "cookie id" . $cook_user_id; 
echo "Session A " . $test1; 
Print_r ($_SESSION); 
$sid = session_id(); 
if($sid) { 
    echo "Session exists!" . session_id(); 
} else { 
    echo "NOTHING!"; 
} 
echo $_SESSION['user_name']; 
echo $_COOKIE['user_id']; 
echo $_COOKIE['user_key']; 
?> 
+1

是否在任何地方調用session_start()?需要在您打算使用會話的每個頁面上 – 2013-04-04 03:24:30

+1

我想你沒有發佈完整的代碼,因爲你的if(empty($ err)){'可能包含父'if'並且問題可能在那裏。 – 2013-04-04 03:28:21

+0

我已經用完整的代碼重新發布。 file是一個inc.php文件 – 2013-04-04 03:32:36

回答

0

請記住,您應該在該頁面的最頂部開始會話,即在任何開始之前。因此您將獲得會話變量的空值。如果你想使用會話變量。移動 session_start();

第一行。

肯定這會解決你的問題

+0

adding session_start();到login.php的頂部沒有解決我的問題,我的回聲仍然沒有返回數據 – 2013-04-04 03:58:32

+0

Im獲取Array()會話存在!a2e63caa6bdeea303bc779cddb6ce95a現在從回聲有效登錄後 – 2013-04-04 04:00:08

+0

我不想在login.php啓動會話直到我確認用戶有效。這就是它在哪裏的原因。此代碼是操作系統,可作爲獨立登錄使用,我試圖將其放入一個incl文件中,以便一旦用戶登錄到有效會話中,他們就會看到只向擁有有效會話的用戶提供的內容 – 2013-04-04 04:08:00