2011-08-06 194 views
2

我正在嘗試創建一個簡單的登錄表單。我有session_start();作爲頁面上加載的第一件東西。我有一個文件login.php,其中包含登錄相關代碼,當單擊登錄按鈕時,該代碼通過ajax調用進行處理。它包含:註冊PHP會話變量

if ($_GET['cemail']) { 

$email = $_GET['cemail']; 
$password = md5($_GET['cpassword']); 
$sql = "select * from users where email='" . $email . "' and password='" . $password . "'"; 
$result = mysql_query($sql); 
if (mysql_num_rows($result) >= 1) { 
    session_register("email"); 
} 
else { 
    echo "<span style='color:#ffffff;'>Invalid Email/Password</span><br>"; 
} 

} 

當我點擊登錄按鈕,我得到這樣的警告: 警告:了session_register()[function.session註冊]:無法發送會話緩存限制器 - 已經發送了頭(輸出開始/ home/clicker/public_html/hstrial-RBochner/login.php:1)在線82上的/home/clicker/public_html/hstrial-RBochner/login.php

第82行是說session_register(「email」 );

我還試圖建立一個註銷按鈕,只是調用session_destroy(),但它給了我這樣的:

警告:session_destroy()[function.session滅]:試圖在/ home銷燬未初始化會話/clicker/public_html/hstrial-RBochner/login.php on line 66

我在這裏做錯了什麼?我試過在不同的地方放置session_start()。任何幫助/想法?謝謝。

+0

可能重複[無法修改標題信息 - 標題已發送,爲什麼發生](http://stackoverflow.com/questions/1827314/cannot-modify-header-information-headers-already-sent-why-its -happening) – meagar

+0

'session_register'已被棄用,並計劃從語言中刪除。你根本不應該使用它。如果你在某個教程中發現它可能是十年前的。 –

+0

這可能是最常見的PHP問題。答案清楚地記錄在任何地方*。在提出新問題之前,請習慣於使用Google搜索錯誤消息並搜索現有問題/答案。 ['session_start']手冊(http://php.net/manual/en/function.session-start.php)包含數十個答案。 – meagar

回答

1

關於您的註銷按鈕問題。您必須在執行打印或回聲之前啓動會話第一

<?php 
//logout.php 
session_start(); 
session_destroy(); 
echo "Logouted" 

,而不是

session_register() 

使用只是

$_SESSION['email'] = ''; 
0

從我可以在session_register() PHP文件(link)讀了,似乎session_register()已被棄用,並且$_SESSION["email"] = "[email protected]";是做自PHP 4.1.0的新途徑。一個代碼示例然後是(我不確定這是否適用於tho,但它應該引導您朝着正確的方向);

<?php 
    if ($_GET['cemail']) { 
     $email = $_GET['cemail']; 
     $password = md5($_GET['cpassword']); 
     $sql = "select * from users where email='" . $email . "' and password='" . $password . "'"; 
     $result = mysql_query($sql); 
     if (mysql_num_rows($result) >= 1) { 
      $_SESSION['email'] = $email; 
     } 
     else { 
      echo "<span style='color:#ffffff;'>Invalid Email/Password</span><br>"; 
     } 
    } 
?> 

對於註銷,那麼你會怎麼做:

<?php 
    session_start(); 
    session_destroy(); 
?> 

<?php 
    session_start(); 
    if(isset($_SESSION['email'])) 
     unset($_SESSION['email']); 
?> 
5

你需要:

  1. 投放在session_start()在你的代碼的開始
  2. 不要使用session_register(),是一個過時的函數,用$ _SESSION ['foo'] ='baa'替換;
  3. destruct session:

    session_start();
    session_destroy();

  4. 您的web應用程序易受到SQL injection攻擊。 -check best way to stop SQL Injection in PHP

+0

我不同意你的第三點 - 未設定($ _ SESSION);是錯誤的 - http://www.php.net/manual/en/function.unset.php#77926 – genesis

+0

因爲我不同意。但好吧,downvote刪除 – genesis

+0

你是對的。更新的響應.. –

0

我把它通過把所有的PHP代碼在頁面的最開始的工作。