2011-08-30 12 views
1

제출 된 데이터를 처리 한 후 내 서명 스크립트가 사용자를 색인 페이지로 다시 리디렉션합니다. 문제는 내 색인 페이지에서 사용자가 로그인했는지 여부를 확인할 수 없다는 것입니다. 나는 삽입 한 :로그인 페이지에 문제가 있습니다.

if (isset($_SESSION['id'])) 
{echo $_SESSION['id']; die();} 

목적을 확인하기위한 인덱스 페이지의 시작 부분에. 그러나 그것은 아무 것도 울리지 않습니다.
내 로그인의 스크립트는 다음과 같습니다

<?php 
include '../includes/common.php'; 
$page='signin'; 
$err = array(); 

foreach($_GET as $key => $value) { 
    $get[$key] = filter($value); 
} 

if ($_POST['dologin']=='Daxil ol') { 
    foreach($_POST as $key => $value) { 
     $data[$key] = filter($value); 
    } 

    $login = $data['login']; 
    $pass = $data['pwd']; 


    if (strpos($login,'@') === false) { 
     $user_cond = "login='$login'"; 
    } else { 
     $user_cond="email='$login'"; 
    } 

    $result = $db->query("SELECT `id`,`pwd`,`fname`,`lname`,`approved`,`type`,`level` FROM users WHERE $user_cond AND `ban` = '0'") or die($db->error()); 

    $num = $result->num_rows; 

    if ($num > 0) { 
     list($id,$pwd,$fname,$lname,$approved, $type, $level) = $result->fetch_row(); 
     if (!$approved) { 
      $err[] = 6; 
     } 
     if ($pwd === PwdHash($pass,substr($pwd,0,9))) { 
      if (empty($err)) { 

       session_start(); 
       session_regenerate_id(true); 

       $_SESSION['id']= $id; 
       $_SESSION['fname'] = $fname; 
       $_SESSION['lname'] = $lname; 
       $_SESSION['type'] = $type; 
       $_SESSION['level'] = $level; 
       $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); 

       $stamp = time(); 
       $ckey = GenKey(); 
       $db->query("update users set `ctime`='$stamp', `ckey` = '$ckey' where id='$id'") or die($db->error()); 

       //set a cookie 

       if (isset($_POST['remember'])) { 
        setcookie("id", $_SESSION['id'], time()+60*60*24*COOKIE_TIME_OUT, "/"); 
        setcookie("key", sha1($ckey), time()+60*60*24*COOKIE_TIME_OUT, "/"); 
        setcookie("fname",$_SESSION['fname'], time()+60*60*24*COOKIE_TIME_OUT, "/"); 
       } 
       header("Location: ../../../index.php"); 
      } 
     } else { 
      $err[] = 7; 
     } 
    } else { 
     $err[] = 8; 
    } 
    if (!empty($err)) { 
    include "../includes/error.php"; 
    } 

} 
?> 

검사 PHP는 오류 로그를. 오류 없음. 또한 MySql DB 테이블을 점검했습니다. 그것은 ctime과 ckey를 설정합니다. 로그인 부분이 작동합니다 (제 생각 엔). 필터 기능은 common.php입니다 (게시물 데이터 삭제).

+1

session auto start directive 세트를 가지고하지 않는 한 세션 데이터를 필요로 각 페이지에 세션을 시작하는 데 필요한'첫번째 확인 전에이 어떤'$ 경우 _SESSION' 변수가 설정되어 있습니까? – Artyom

+0

당신은 session_start()를 가지고 있습니까? 색인 페이지에도 있습니까? – realshadow

+0

예 페이지 시작 부분에 있습니다 –

답변

2

(헤더를 페이지에 보내기 전에) 세션을 시작해야합니다. 당신은 또한 당신이()으로 session_start`에 되는거 아니야 사실

<?php 
session_start(); 
//$_SESSION data available here! 
?> 
<html>... 
<? 
    //other php code 
    //$_SESSION data available here! 
?> 
...</html> 

+0

또는 로그인 하시겠습니까? –

+0

나는 양쪽 모두 session_start()를 처음부터 편집했다. 모든 페이지에서 세션 데이터가 필요합니다. 제가 올린 링크를보세요! – CaNNaDaRk

0

두 파일의 시작 부분에 session_start()이 누락 된 것처럼 보입니다.

이 함수 호출이 없으면 PHP는 세션 정보를 전달하지 않습니다. 이 호출을 파일에서 제일 먼저하는 것이 좋습니다.

+0

항상 색인 페이지에서 세션을 시작해야합니까? –

+0

예, 세션 정보를 사용하는 모든 페이지는'session_start()'가 필요합니다 – johnluetke

+0

누군가가 세션에 로그인하면 세션을 시작하는 방법이나 손님도 세션이 활성화 될지는 중요하지 않습니다. –

관련 문제