2012-02-01 4 views
1

가능한 중복 :
PHP session seemingly not working

나는 현재 재미를 위해 내 자신의 CMS를 코딩하고있어하지만 난 $ _SESSION을 사용하는 경우, 그것은 작동하지 않습니다. 그때 나는 사용자가 금지되어 있지 않은 경우 확인 내 데이터베이스에서 사용자 정보를 얻을 코드에서

<?php 
include('header.php'); 
if (isset($_SESSION['logged_in'])) 
{ 
    $link = 'profile.php'; 
    $link_name = 'Profile'; 
} 
else 
{ 
    $link = 'login.php'; 
    $link_name = 'Login'; 
} 

if (isset($_POST['action'])) 
{ 
    $username = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string($_POST['password']); 
    $password = md5($password); 
    $user = mysql_query("SELECT * FROM users WHERE `username`='".$username."'"); 
    if (mysql_num_rows($user) == 1) 
    { 
      while ($userinfo = mysql_fetch_array($user)) 
      { 
        if ($userinfo['banned'] != true) 
        { 
          $_SESSION['user_id'] = $userinfo['id']; 
          $_SESSION['username'] = $userinfo['username']; 
          $_SESSION['logged_in'] = "true"; 
          header('Location: index.php'); 
        } 
        else 
        { 
          header('Location: login.php?error=banned'); 
        } 
      } 
    } 
    else if (mysql_num_rows($user) == 0) 
    { 
      header('Location: login.php?error=not-found'); 
    } 
} 
?> 

: 세션은

내 코드 있어요 ... 저장되지 않습니다. 그렇지 않다면 $ _SESSION []을 설정하고 집으로 리디렉션합니다.

+3

'header.php'에 없으면'session_start()'가 생략되었습니다. '$ _SESSION'에 액세스하는 각 스크립트에서'$ _SESSION'에 액세스하거나 설정하기 전에 반드시 호출해야합니다. –

+0

당신은 session_start()를 가지고 있습니까? 각 페이지의 상단에? – dSquared

+0

@Michael'header.php'에 있습니다 ... –

답변

10

처음에는 session_start()이 필요합니다.

+0

'session_save()'가 필요합니까? –

+2

PHP에는 그러한 함수가 없습니다. – spidEY

+0

@Frederick : _start() '면 세션은 스크립트가 종료 될 때 자동으로 저장됩니다. 'session_write_close()'를 사용하여 강제로 저장할 수는 있지만 변경을하면 나중에 자동 저장을하지 못하게됩니다. 다시 열려면 session_start()를 다시 실행해야합니다. –

4

스크립트 시작 부분에 session_start()으로 전화해야합니다. 세션 변수에 대한 액세스가 필요한 모든 페이지에서 호출해야합니다.

1

session_start()가 호출되고 있는지 확인하십시오. Tamper Data를 사용하여 보낸 사람 및받은 요청에 대한 머리글을 확인하십시오. 서버에서 Set-Cookie 헤더를 찾고 클라이언트에서 Cookies Header를 찾고 있습니다. 여기에는 PHPSESSID가 있어야합니다. 이 메시지가 표시되지 않으면 세션이 시작되지 않은 것입니다. 행운을 빕니다!

관련 문제