2011-05-16 77 views
0

我正在嘗試爲頁面創建一個登錄和註銷腳本,但由於某種原因,它不適合我。它似乎工作正常,直到我嘗試註銷。它似乎破壞會話變量,但它仍然讓我查看頁面。 繼承人我登錄代碼:在會話中註銷PHP的問題

代碼: 的login.php

<?php 
// Use session variable on this page. This function must put on the top of page. 

session_start(); 
////// Logout Section. Delete all session variable. 
session_destroy(); 
$Name=$_POST['Name']; 
$Pass=$_POST['Pass']; 

// To protect MySQL injection (more detail about MySQL injection) 

$Name = stripslashes($Name); 
$Pass = stripslashes($Pass); 
$Name = mysql_real_escape_string($Name); 
$Pass = mysql_real_escape_string($Pass); 

$sql="SELECT * FROM reg1 WHERE uname='$Name' and pass='$Pass'"; 
$result=mysql_query($sql); 
if(mysql_num_rows($result)!='0') // If match. 
{ 
session_register("uname"); // Craete session username. 
header("location:loged.php"); // Re-direct to loged.php 
exit; 
}else{ // If not match. 
echo '<script type="text/javascript"> 
     window.alert("Wrong UserName And Password"); 
     window.location="index.php" 
     </script>'; 
} 

// End Login authorize check. 



?> 

logout.php


<?php 

// Inialize session 
session_start(); 

// Delete certain session 
unset($_SESSION['uname']); 
// Delete all session variables 
session_destroy(); 

// Jump to login page 
header("Location: index.php?msg=Successfully Logged out"); 
} 


?> 

感謝每一個...

+0

'$名稱=的stripslashes($名)'---這可以打破的數據,如果' magic_quotes'被關閉。 – zerkms 2011-05-16 07:03:53

+0

如何檢查用戶是否在loged.php上登錄? – BlueEel 2011-05-16 07:07:14

+0

閱讀關於session_destroy的手冊,看看還有什麼需要完成破壞會議:http://php.net/session_destroy – 2011-05-16 07:08:48

回答

2

要設置會話,但是你不檢查它是否設置在任何地方。意味着你沒有檢查用戶登錄或不..你需要做這樣的

if (!isset($_SESSION['uname'])) /*If uname not set then it is a guest*/ 
{ 
    //page contents for guest user 
} 
else 
{ 
    //page for authenticated user. 
} 
0

在你的頁面,你想登錄的用戶進行訪問的唯一,你檢查$ _SESSION值['uname']?

0

我覺得只有session_destroy();功能足以讓你註銷。你不需要解除'uname'。對於那些在用戶登錄後出現的頁面,您必須在每頁頂部應用一些會話檢查功能......

1

session_register()從PHP 5.3.0開始已棄用。替換:

session_register("uname"); // Craete session username. 

有:

$row = mysql_fetch_assoc($result); 
$_SESSION['uname'] = $row['uname']; 

註銷與(更換session_destroy()):

////// Logout Section. 
unset($_SESSION['uname']); 

最終的結果將是這樣的:

<?php 
// Use session variable on this page. This function must put on the top of page. 
session_start(); 

// Logout Section 
if (isset($_SESSION['uname'])) 
    unset($_SESSION['uname']); 

// Login Section 
$Name=$_POST['Name']; 
$Pass=$_POST['Pass']; 

// To protect MySQL injection (more detail about MySQL injection) 
$Name = stripslashes($Name); 
$Pass = stripslashes($Pass); 
$Name = mysql_real_escape_string($Name); 
$Pass = mysql_real_escape_string($Pass); 

$sql="SELECT * FROM reg1 WHERE uname='$Name' and pass='$Pass'"; 
$result=mysql_query($sql); 
if(mysql_num_rows($result)!='0') // If match. { 
    $row = mysql_fetch_assoc($result); 
    $_SESSION['uname'] = $row['uname']; 
    header("Location: loged.php"); // Re-direct to loged.php 
    exit; 
} else { // If not match. 
    echo '<script type="text/javascript"> 
     window.alert("Wrong UserName And Password"); 
     window.location="index.php" 
     </script>'; 
} 
?> 

註銷腳本(語法錯誤或固定的,因爲不必要session_destroy();):

<?php 
// Inialize session 
session_start(); 

// Delete certain session 
if (isset($_SESSION['uname'])) { 
    unset($_SESSION['uname']); 
} 

// Jump to login page 
header("Location: index.php?msg=Successfully Logged out"); 
?> 

如何檢查是否登錄:

session_start(); 
if (isset($_SESSION['uname'])) 
{ 
    // logged in 
} 
else 
{ 
    // not logged in 
} 
+0

嗨Richard86感謝您的幫助,但它仍然是行不通的問題,因爲它是... ... – 2011-05-16 09:55:58

+0

@Umesh shrivas歡迎您!對不起,它不起作用。據我瞭解,在註銷腳本後註冊if(isset($ _ SESSION ['uname']))''後,if語句仍然成立。那是對的嗎? – AndersTornkvist 2011-05-16 23:13:29

0

如果UNAME是你使用,如果用戶登錄,你應該嘗試把第一驗證值:

session_destroy();然後取消設置($ _ SESSION [ 'UNAME'])

我希望這對你的作品....

+0

對不起,這是我需要關閉會話時適用於我的東西:session_unset(); session_destroy(); – Alejandro 2011-05-16 14:47:38

+0

你必須按照這個順序 – Alejandro 2011-05-16 14:48:15