2010-12-29 5 views
0

사용자를 로그인 할 수 있지만 다음 페이지 (memebers 영역)로 처리하는 동안 $_SESSION[email]을 인쇄하는 데 필요한 사용자 정보를 표시 할 수 없습니다. 나는 무엇이 일어나고 있는지 확신하지 못한다. 아래는 로그인 코드이며 테스트 구성원은 페이지입니다.다른 페이지로 넘겨주는 문제가 있습니다.

로그인 페이지 :

session_start(); 

//also in a real app you would get the id dynamically 
$sql = "select `email`, `password` from `accounts` where `email` = '$_POST[email]'"; 
$query = mysql_query($sql) or die ("Error: ".mysql_error()); 

while ($row = mysql_fetch_array($query)){ 

    $email = $row['email']; 
    $secret = $row['password']; 

    //we will echo these into the proper fields 

} 
mysql_free_result($query); 

// Process the POST variables 
$email = $_POST["email"]; 

//Variables 
$_SESSION["email"] = $_POST["email"]; 

$secret = $info['password']; 

//Checks if there is a login cookie 

if(isset($_COOKIE['ID_my_site'])) 

//if there is, it logs you in and directes you to the members page 

{ 
    $email = $_COOKIE['ID_my_site']; 

    $pass = $_COOKIE['Key_my_site']; 

    $check = mysql_query("SELECT email, password FROM accounts WHERE email = '$email'")or die(mysql_error()); 

    while($info = mysql_fetch_array($check)) 

    { 

     if (@ $info['password'] != $pass) 
     { 
     } 

     else 

     { 

      header("Location: home.php"); 

     } 
    } 

} 

//if the login form is submitted 

if (isset($_POST['submit'])) { // if form has been submitted 

    // makes sure they filled it in 

    if(!$_POST['email'] | !$_POST['password']) { 

     die('You did not fill in a required field.'); 

    } 

    // checks it against the database 

    if (!get_magic_quotes_gpc()) { 

     $_POST['email'] = addslashes($_POST['email']); 

    } 

    $check = mysql_query("SELECT email,password FROM accounts WHERE email = '".$_POST['email']."'")or die(mysql_error()); 

    //Gives error if user dosen't exist 

    $check2 = mysql_num_rows($check); 

    if ($check2 == 0) { 

     die('That user does not exist in our database. <a href=add.php>Click Here to Register</a>'); 
    } 

    while($info = mysql_fetch_array($check)) 

     //gives error if the password is wrong 

     if (@ $_POST['password'] != $info['password']) { 

      die('Incorrect password, please try again'); 
     } 

     else 

     { 

      // if login is ok then we add a cookie 

      $_POST['email'] = stripslashes($_POST['email']); 

      $hour = time() + 3600; 

      setcookie(ID_my_site, $_POST['email'], $hour); 

      setcookie(Key_my_site, $_POST['password'], $hour); 

      //then redirect them to the members area 

      header("Location: home.php"); 

     } 

    } 

} 

else 

{  

    // if they are not logged in 

?> 

<?php 

} 

?> 

home.php

 Just realized the existing code gets in to the home.php file but will not echo anything. But as soon as you hit refresh the session is gone. 
+1

제안 사항은 사용자 이름이나 비밀번호가 틀린 경우 최종 사용자에게 알려주지 마십시오. 이것은 계좌 개통을 완화하는 데 도움이 될 수 있습니다. – Woot4Moo

+0

오, 예, 회원 코드를 테스트하는 코드입니다. 나중에 수정 될 것입니다. 감사합니다 검보. – AAA

+0

세션 ID는 어떻게 전송됩니까? 세션 ID에 관한 설정 (http://php.net/session.configuration) (예 : * session.use \ _cookies *, * session.use \ _only \ _cookies *, * session.use \ _trans \ _sid *). – Gumbo

답변

1

당신이 그 코드를 다시 포맷하십시오 할 수

session_start(); 

if(!isset($_SESSION['email'])) { 
    header('Location: login_test3.php'); die('<a href="login_test3.php">Login first!</a>'); 
} 

//Variables 
$_SESSION["email"] = $email; 

print $_SESSION['name']; 

UPDATE? 들여 쓰기와 공백으로 이해하기가 정말 어렵습니다. 백업이 끝나면 최선을 다해 도와 드리겠습니다.

팁 하나 : 입력 청소! 내가 대시하고 기간이 가장 짧은 문자열에 대한 충분한 것으로 나타났습니다

function forceInteger($variable) { 
    return preg_replace("/[^0-9]/", "", $variable); 
} 
function forceAlpha($variable) { 
    return preg_replace("/[^A-Za-z]/", "", $variable); 
} 
function forceAlphaNum($variable) { 
    return preg_replace("/[^A-Za-z0-9 \-\.]/", "", $variable); 
} 
function forceAlphaNumNoSpace($variable) { 
    return preg_replace("/[^A-Za-z0-9\-\.]/", "", $variable); 
} 

:

이 함수는 나에게 문제를 많이 저장했습니다. 텍스트 영역에 복용하는 경우,이를 통해 실행 login.php (인증을 처리 스크립트)

session_start(); 
if ($_POST["submit"]) { 
    // query database for email and password, where email is posted email 
    $sql = "SELECT * FROM `accounts` WHERE `email` = '{$_POST[email]'}"; 
    $query = mysql_query($sql) or die ("Error: ".mysql_error()); 

    if (mysql_num_rows($query) == 1) { 
     // there's one result - we got it! 
     $result = mysql_fetch_assoc($query); 
     if ($_POST["password"] == $result["password"]) { 
      // Successful auth. 
      // Set session vars and redirect with header() 
      $_SESSION["Authenticated"] = true; 
      $_SESSION["FirstName"] = $result["FirstName"]; 
      $_SESSION["Email"] = $result["Email"]; 
      header("Location: /home.php?event=login"); 
      // Don't forget to exit(), otherwise some other code may run, causing unintended behaviours 
     } 
     else { 
      // Password didn't match. 
      exit("Incorrect password"); 
     } 
    } 
} 
else { 
    // No email match 
    exit("Email not found."); 
} 

몇 점 :
1. 이중에서 여기

function forceNaturalLanguage($variable) { 
    return preg_replace("/[^A-Za-z0-9 \-\.\?\!]/", "", $variable); 
} 

내 제안이다 따옴표 붙은 문자열을 사용하여 배열 값을 쿼리에 넣으려면 다음과 같이 {중괄호}로 묶어야합니다. "안녕하세요, {$ _SESSION ["FirstName "]}";

2. EVER은 사용자 입력에서 직접 세션 변수를 설정하지 마십시오. 데이터베이스에서 가져온다면 거기에서 저장하십시오. 그것은 가장 안전한 방법입니다.

3. PHP 세션을 사용할 때 자신의 로그인 쿠키를 설정하는 것은 의미가 없습니다. 이름을 변경하려면 다음과 같이 시도하십시오.

ini_set("session.name","coolSession"); 
+0

서식이 다시 지정되었습니다. 감사. – AAA

+1

사용자의 자격 증명을 데이터베이스에 두 번 묻는 이유를 묻는 질문을 할 수 있습니까? 내 제안을 편집하여 답변을 드리겠습니다 ... –

+0

Thanks Alex. 하지만 여전히 작동하지 않습니다. 지금 당장 비어있는 페이지가 나옵니다. – AAA

관련 문제