2012-02-25 3 views
0
내가 로컬 호스트의 세션에 문제가

를 작동하지 않는 문제는 새 게시물 페이지로 리디렉션 할 때 세션이 먼저 로그인해야대로 응답입니다 실제로 작동하지 않는 것입니다세션이 제대로

로그인 코드

<?php 
include '../Class/db.class.php'; 
include '../Class/validation.class.php'; 
@session_start(); 
if(!$_SESSION['user']){ 
    $link=$_GET['dir']; 
    if($link){ 
echo <<<EOF 
<html> <head><title>ورود</title></head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<form method='post' action='index.php?dir=$link'> 
    Username: <input type='text' name='user'><br /> 
password<input type='password' name='pass'><br /> 
    <input type='hidden' name='hidd' value=1> 
    <input type='submit' value='login'><br /> 
</form> 
EOF; 
    } 
else { 
    echo <<<EOF 
<html> <head><title>login</title></head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<form method='post' action='index.php'> 
    username: <input type='text' name='user'><br /> 
password: <input type='password' name='pass'><br /> 
    <input type='hidden' name='hidd' value=1> 
    <input type='submit' value='login'><br /> 
</form> 
EOF; 
    } 
} 
$db=new db("localhost", "root", "", "blog"); 
$con=$db->connect(); 
$logout=$_GET['logout']; 
$user=$_POST['user']; 
$pass=$_POST['pass']; 
$hidden=$_POST['hidd']; 
if($hidden){ 
if(!$user){ 
    echo "username field can't left blank"; 
} 
elseif (!$pass) { 
    echo 'password field can't left blank!'; 

} 
else{ 
    $userres=$db->usersearch($user, $pass); 

    if($userres==FALSE){ 
     echo 'username or password is wrong'; 
    } 
else { 
     $_SESSION['user']=$user; 

    } 
} 
} 
if($_SESSION['user']){ 
    $link=$_GET['dir']; 


echo "you logged in ".$_SESSION['user']; 
if($link=="new") 
    echo '<meta http-equiv="REFRESH" content="0;url=../admin/post/new.php">'; 

} 

if($logout) 
    session_destroy(); 
if($_SESSION['user']) 
echo '<br /><a href="?logout=1">logout</a>'; 

?> 

새 우편 번호

<?php 
@session_start(); 

if($_SESSION['user']=="admin"){ 
    include '../../Class/db.class.php'; 
echo <<<EOF 
<form method=post action="new.php"> 
<br /> subject: 
    <br /> 
    <input type="text" name="title"><br /> 
    post:<br /> 

    <textarea cols=50 rows=10 name="post"></textarea><br /> 
    <input type="submit" value="send"> 

EOF; 
$title=$_POST['title']; 
$post=$_POST['post']; 
$db=new db("localhost", "root", "", "blog"); 
$db->connect(); 
if($title && $post){ 

    $d=$db->post_insert($title, $title, 1); 
    if($d==TRUE) 
      echo "post created"; 
    else 
     echo "an error occurred while sending the post"; 




} 

$dd=$db->read(0, 20); 
for($i=0;$i<20;$i++){ 
    echo $dd['content'][$i]."<br />"; 
} 

} 
else 
{ 
    echo "you should login first"; 
    echo $_SESSION['user']; 
} 
/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
?> 

저를 도와주세요!

+4

먼저 @session_start()를 왜 사용하고 있는지 말해 줄 수 있습니까? @ 모든 경고 등을 억제합니다 그래서 내가 먼저 할 일은 @session_start()를 호출하는 것입니다; as session_start(); –

+0

문제 해결 – hatef

답변

0

@ 기호가있는 session_start()의 오류 출력을 억제한다는 사실은 session_start가 무시하고있는 오류를보고하고 있음을 나타냅니다.

오류가보고되면 오류를 확인하여 무엇이 잘못되었는지 확인해야합니다.

일반적으로 session_start는 이미 보낸 헤더로 인해 실패합니다. 이것은 session_start가 호출되기 전에 스크립트가 텍스트를 출력하는 경우 발생합니다. 헤더가 보내지면 헤더를 보내는 것에 따라 세션을 시작할 수 없습니다.

이 문제를 해결하려면 스크립트에서 session_start가 가장 먼저 발생하는지 확인해야합니다. session_start가 포함 된 다음에 가장 먼저 발생하기 때문에 스크립트 시작 부분에 공백이 있거나 포함하는 스크립트에 출력을 생성하는 공백 또는 문장이 있음을 의미합니다. 포함 된 파일을 확인하고 PHP 태그 바깥에있는 공백을 수정하고 session_start가 발생할 때까지 아무 것도 출력하지 않는지 확인해야합니다.

참고로 오류 방지를 위해 @를 사용하지 마십시오. 이는 카펫 아래에서 해결해야 할 잠재적 인 심각한 문제를 해결하는 것과 동일한 것입니다.