2011-08-30 11 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を設定します。 signinの部分は動作します(私は思う)。フィルタ機能は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

誰かがサインインした場合にセッションを開始する方法や、ゲストがセッションをアクティブにするかどうかは関係ありません。 –