2014-01-15 88 views
-2

我正在創建一個表單,人們需要登錄才能更新,登錄和會話重定向工作正常。我已經嘗試了數百種來自書籍和論壇的會議變體,但似乎沒有做我想做的事情,而且看起來很簡單。 這是上一頁的代碼。php會話不能在其他頁面上工作

<?php 
include("setting.php"); 

$sql="SELECT * FROM $tbl_namem"; 
$result=mysql_query($sql); 

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 

$sql="SELECT * FROM $tbl_namem WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 

if($count==1){ 

// Register $myusername, $mypassword and redirect to file "login_success.php" 
session_start(); 
$_SESSION["myusername"]; 
$_SESSION["mypassword"]; 
header("location: login_success.php"); 
} 
else { 
echo "Wrong Username or Password Please Try Again"; 
} 
?> 

我想加載下兩頁,如果用戶名和密碼已驗證。

+2

嘗試將'session_start();'放在頁面的頂部,而不是下面的更下面。加上這個'$ _SESSION [「myusername」];'另一個,如果它們沒有分配任何東西,對你沒有任何好處。你可以試試'$ _SESSION [「myusername」] = $ _ POST ['myusername'];等等。 –

+0

我們可以看到下一頁的代碼嗎? – Aust

+0

我還注意到,您以純文本存儲密碼,這是一個明確的「no-no」。那樣,用'mysql_ *'函數而不是'mysqli_ *'與準備好的語句或PDO混合在一起,就等於是災難。 –

回答

0
if(empty($_SESSION['myusername']['mypassword'])) { 
    header("Location: login.php"); 
    die("Redirecting to login.php"); 
} 
$username = $_SESSION['myusername']['mypassword']; 

試試這個在任何下一頁的頂部。

0

嘗試這種在受密碼保護的所有頁面的頂部:

session_start(); 
if(!isset($_SESSION["myusername"])){ 
header("location: logout.php"); 
die(); 
} 

我要告訴你的會話變量$ _SESSION [「名爲myUsername」];和$ _SESSION [「mypassword」]是空的,給它們這樣的值,以便你最終可以使用它們。

創建您展示一個註銷消息,還添加了網頁登出:

session_start(); 
session_unset(); 
session_destroy(); 

這會破壞會話和註銷用戶。

* *使用mysqli,您正在使用的mysql函數將很快從PHP中刪除。

0

假設你的會話正常啓動時,這些線路做diddly蹲:

$_SESSION["myusername"]; 
$_SESSION["mypassword"]; 

你可能指的是一箇舊的,過時的,不安全的,並可怕的例子,是靠register_globals其已在幾年前被刪除,在此之前已被棄用多年,並且自創立以來一直是一個可怕的想法。

基本上,任何時候你看到類似變量只是神奇地存儲/從session/get/post/cookie/etc數組中檢索到的東西,這意味着它是舊的,不安全的,並且錯誤

您需要實際分配這些變量到$_SESSION陣列,例如:

$_SESSION["myusername"] = $myusername; 
$_SESSION["mypassword"] = $mypassword; 

這就是說,session_start()通常應該是一個,如果不是,第一行中創建的每個頁面。這個函數需要在後臺設置一些HTTP頭文件,如果你的代碼恰好在這之前產生了任何輸出,那麼它將會失敗,產生警告,而你的會話根本無法工作。

相關問題