2013-05-03 168 views
0

請問任何人請告訴我如何解決這個問題?我花了很多天尋找解決方案,但我找不到一個解決方案。會話未被存儲

這是我的問題。

「的login.php」 文件:

require_once("./include/membersite_config.php"); 

if(isset ($_POST['submitted'])) 
{ 
    if($fgmembersite->Login()) 
    { 
     $fgmembersite->RedirectToURL("login-home.php"); 
    } 
} 

**membersite_config . php ** contains host, username, pass, and also calls **fg_membersite . php ** which contains functions: 

function Login() 
{ 
    if(empty($_POST['username'])) 
    { 
     $this->HandleError("UserName is empty!"); 
     return false; 
    } 

    if(empty($_POST['password'])) 
    { 
     $this->HandleError("Password is empty!"); 
     return false; 
    } 

    $username = trim($_POST['username']); 
    $password = trim($_POST['password']); 

    if(!isset($_SESSION)) 
    { 
     $sessid = session_start(); 
    } 
    if(!$this->CheckLoginInDB($username, $password)) 
    { 
     return false; 
    } 

    $_SESSION[$this->GetLoginSessionVar()] = $username; 

    ** echo empty($_SESSION[$sessionvar])? 'true' : 'false'; ** 
    return true; 
} 

function CheckLogin() 
{ 
    if(!isset($_SESSION)) 
    { 
     session_start(); 
    } 

    $sessionvar = $this->GetLoginSessionVar(); 
    ** echo empty($_SESSION[$sessionvar])? 'true' : 'false'; ** 

    if(empty($_SESSION[$sessionvar])) 
    { 
     return false; 
    } 

    return true; 
} 

function GetLoginSessionVar() 
{ 
    $retvar = $this->rand_key; 
    $retvar = 'usr_' . substr($retvar, 0); 
    return $retvar; 
} 

function CheckLoginInDB($username, $password) 
{ 
    if(!$this->DBLogin()) 
    { 
     $this->HandleError("Database login failed!"); 
     return false; 
    } 
    $username = $this->SanitizeForSQL($username); 
    $pwdmd5 = $password; 
    $qry = "Select name, email from $this->tablename where username='$username' and password='$pwdmd5' and confirmcode='y'"; 

    $result = mysql_query($qry, $this->connection); 

    if(!$result || mysql_num_rows($result) <= 0) 
    { 
     $this->HandleError("Error logging in. The username or password does not match"); 
     return false; 
    } 

    $row = mysql_fetch_assoc($result); 

    $_SESSION['name_of_user'] = $row['name']; 
    $_SESSION['email_of_user'] = $row['email']; 

    return true; 
} 

**login - home . php ** after successfully logged in: 

require_once("./include/membersite_config.php"); 

if(!$fgmembersite->CheckLogin()) 
{ 
    $fgmembersite->RedirectToURL("login.php"); 
    exit; 
} 

釷的問題是:我已經迴盪檢查$ _SESSION []數組的狀態。輸入正確的用戶名和密碼後,回顯爲空($ _ SESSION [$ sessionvar])? '真假';登錄功能顯示錯誤,但在CheckLogin顯示爲真。我不知道爲什麼。

+6

'在session_start()'應在打印出HTML模板之前,在頁面的頂部(不管是否有會話)被調用。 – Blender 2013-05-03 20:29:57

+0

@Blender - 你的評論可能是這個問題的正確答案,爲什麼不把它作爲答案? – Revent 2013-05-03 20:33:02

+0

使用print_r($ _ SESSION)以及session_start()作爲user2348272表示 – Notepad 2013-05-03 20:33:32

回答

3

session_start()開始通過添加cookie或查詢參數來識別用戶來繼續會話。你必須將其放置在您的模板(被打印出來什麼之前,甚至一個空行)的非常頂部,即使用戶已經有一個會話:

<?php 
session_start(); 
?> 
+0

我注意到他用session_start設置了$ sessid,但我相信他想要session_id() – Fabi 2013-05-03 21:17:58

+0

我嘗試將session_start()放在fg_membersite.php的頂部,但它仍然是一樣的。雖然Login函數返回true,但CheckLogin函數返回false。 – Anh 2013-05-04 01:40:10

+0

我認爲問題是爲什麼Login()中的$ _Session []中的值在CheckLogin()時沒有了。 – Anh 2013-05-04 01:55:06