2012-04-05 108 views
0

我有以下問題,會話不保留信息。 因此,我可能犯了很多錯誤,但我不知道爲什麼,如果你看到其他什麼是無用的/缺少的,你能否說出來。 這是一個登錄腳本。PHP的會話

我認爲這是很好的,直到我在其他頁面(home.php)看到,它找不到會話ID。

我是新來的PHP,但是這將是很好,如果有人可以幫助:) 下面是代碼,

<?php 
    error_reporting(E_ALL^E_NOTICE); 
    ini_set('display_errors', '0'); 
    session_start(); 
    include ('db_connect.php'); 
    include("error.php"); 

    if($_SERVER['REQUEST_METHOD'] == "POST") 
    { 
     //formulier verstuurd 
     $username = $_POST['username']; 
     $password = $_POST['password']; 

     //protect MySQL Injection 
     $username = mysql_real_escape_string($username); 
     $password = mysql_real_escape_string($password); 

     $query = mysql_query("SELECT * FROM inlog WHERE username = '$username' AND password = '$password' ") or die(mysql_error()); 
     $rows = mysql_num_rows($query); 

     if($rows == 1) { 
     $_SESSION['userername'] = $username; 
     header("location:home.php"); 
     }  
     else 
     { 
      $wronguser = "<div id='wronguser'>*Verkeerd gebruikersnaam of wachtwoord</div>";   
      }   
     } 

     ?> 

//dbconnect.php

<?php 
    $connect = mysql_connect('localhost', 'root', 'root'); 
    mysql_select_db('applicatie', $connect); 
    ?> 

//錯誤.PHP

<?php 
    ini_set('display_errors',1); 
    error_reporting(E_ALL); 
    ?> 

ü PDATE。 因爲會話是不正確的,我不能再登錄了:/

+0

那麼,是什麼'$ rows'包含哪些內容? – alex 2012-04-05 12:49:09

+0

會話變量賦值錯誤,$ _SESSION ['userername'] – pharalia 2012-04-05 12:50:08

+0

您是否記得在home.php中啓動會話?我們可以看到你在home.php中使用會話嗎? – Repox 2012-04-05 12:58:14

回答

1

嘗試這個

error_reporting (E_ALL^E_NOTICE); 
ini_set ('display_errors', '0'); 
session_start(); 
include ('db_connect.php'); 
include ("error.php"); 

/** 
* Check Login 
*/ 
if (isset ($_POST ['username']) && isset ($_POST ['password'])) { 

    $username = $_POST ['username']; 
    $password = $_POST ['password']; 

    // protect MySQL Injection 
    $username = mysql_real_escape_string ($username); 
    $password = mysql_real_escape_string ($password); 

    $query = mysql_query ("SELECT * FROM inlog WHERE username = '$username' AND password = '$password' ") or die (mysql_error()); 
    $rows = mysql_num_rows ($query); 

    if ($rows == 1) { 
     $_SESSION ['userername'] = $username; 
     $_SESSION ['auth'] = true; 
     header ("location:home.php"); 
    } 
    else 
    { 
     $_SESSION ['userername'] = false; 
     $_SESSION ['auth'] = false; 
    } 
} 

/** 
* Logout 
*/ 

if (@$_GET ['cmd'] == "logout") { 
    $_SESSION = array(); 
} 

/** 
* Error Output 
*/ 

if (! $_SESSION ['auth'] || ! $_SESSION ['userername']) { 
    $wronguser = "<div id='wronguser'>*Verkeerd gebruikersnaam of wachtwoord</div>"; 
    die ($wronguser); 
} 

我希望這有助於

感謝

+0

哇,感謝您的快速和良好的答覆,反正我仍然有「不能修改標題信息」 – 2012-04-05 13:12:53

+0

這個錯誤是由於'db_connect.php'或'error.php'大多數包含空的空間....該行的結尾或者正在輸出一個值,然後調用'header' – Baba 2012-04-05 13:15:36

+0

檢查你的文件..如果你有同樣的問題,我可以給你一個轉折 – Baba 2012-04-05 13:16:26

0

請記住,在session_start();需要在使用會話的所有頁面上。 最好把它寫在一個頭文件中,並將其包含在每一頁上。

而且您的會話變量命名爲userername,小錯字

+0

我在所有頁面推杆它,include函數是一個很好的提示;),但它並沒有解決我的問題 – 2012-04-05 13:00:57

0

,如果你使用重定向你header("Location...") PHP腳本不能寫會話。據我記得這也只發生在重定向到同一臺服務器上的腳本時(有人可以證實這一點?)。

你需要explicetly使用session_write_close()關閉會話:

.... 
$_SESSION['userername'] = $username; 
session_write_close(); 
header("Location: home.php"); 
exit; 
+0

警告:不能更改頭信息 - 頭已經發出(輸出開始/用戶/ Rinke /文檔/ MAMP/3e periode/index.php:1)在/ Users/Rinke/Documents/MAMP/3e periode/index中。php在第24行////第24行確實是標題, – 2012-04-05 13:02:44

+0

那麼任何想法下一步該做什麼? – 2012-04-05 13:04:06

+0

會話var仍應存儲。但標題顯然存在問題。檢查error.php和db_connect.php以查看您是否在使用echo或發送頭中的任何一個 – Zac 2012-04-05 13:11:07

0

試圖把在session_start()在第一行如下

<?php 
session_start(); 
error_reporting(E_ALL^E_NOTICE); 
ini_set('display_errors', '0'); 
+0

沒有。:)謝謝 – 2012-04-05 13:21:28