2012-01-24 3 views
2

나는 스스로에게 설명 할 수없는 PHP 세션 처리에 문제가 있습니다. 저는 처음부터 PHP를 연구 중이며 세션을 라이브로 유지하는 방법을 알 수 없습니다 :PHP 5의 세션 처리

이것은 사용자가 로그인하거나 오른쪽 페이지를 방문한 데이터베이스에 등록 할 수있는 내 인덱스 페이지입니다. 그는 로그인 어떤지를 확인 돌아올 :

코드 :

사실
Index 

    <?php session_start(); ?> 

    <a href="register.php" target="_self"> Register </a> 

    <a href="login.php" target="_self"> Login </a> 


<?php 

if(isset($_SESSION['login'])) 
    { 
     echo "Logged as: ".$_SESSION['nlogin']; 

?> 
    <form method="post" action="<?php unset($_SESSION['login']) ?>"> 
    <input type="button" name="logOut" value="LogOut" /> 
    </form> 

<?php 
    } 
    else 
    { 
    echo "Please Register or Login"; 
    } 
    ?> 

이 작품, 내가 다시 말한다 login.php에서 올 때 때문에 "기록 등 : 관리자"

그러나 로그인 페이지를 얻으려면 링크를 클릭하거나 등록하십시오. 페이지를 다시 인덱스 페이지에서 "Logged as ..."같은 메시지가 나타나야하지만 세션이 닫힌 것으로 보입니다. 내가 다시 여기에 돌아올 때

내가 다시 인덱스 페이지에 "위로"위의 링크를 사용하여 온
<?php 


session_start(); 

include "dbConnect.php"; 

if(isset($_SESSION['login'])) 
    { 
     echo "Logged as: ".$_SESSION['nlogin']; // IT NEVER SHOW THIS MESSAGE 
    } 

if(isset($_POST['submit']) &&(trim($_POST['submit']) == "Login")) 
    { 
     if(!isset($_POST['user']) || $_POST['user']=="") 
     { 
      echo "Attenzione inserire l'username."; 
     } 
     elseif(!isset($_POST['pwd'])||$_POST['pwd']=="") 
     { 
      echo "Attenzione inserire la password."; 
     } 
     else 
     { 
      $u = trim(filter_var($_POST['user'], FILTER_SANITIZE_STRING)); 
      $u = str_replace(" ","_",$u); 
      $p = trim(filter_var($_POST['pwd'], FILTER_SANITIZE_STRING)); 
      $p = sha1($p); 

      $istance = new dbHandle; 
      $istance->connect(); 
      $data = $istance->query("SELECT * FROM login WHERE username_login = '$u' AND password_login = '$p'"); 
      if(mysql_num_rows($data) == 0) 
      { 
       echo "Failed"; 


       echo "<a href='index.php' target='_self'> Go Back </a>"; 
      } 
      else 
      { 
       echo "Logged"; 
       $res = $istance->getdata($data); 
       $_SESSION['login'] = $res->id_login; 
       $_SESSION['nlogin'] = $res->username_login; 



       echo "<a href='index.php' target='_self'> Go Back </a>"; 

      } 
     } 
    } 
    else 
    { 
    ?> 
     Login 


     <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
      ... 
        <input name="user" type="text" size="20" required="required"/> 
      ... 
        <input name="pwd" type="password" size="20" required="required"/> 
      ... 
        <input type="submit" name="submit" value="Login"/> 
     </form> 


     <form method="post" action="<?php unset($_SESSION['login']) ?>"> 
     <input type="button" name="logOut" value="LogOut" /> 
     </form> 

    <?php 
    } 
    $istance->disconnect(); 
?> 

,이 같은 기록을 보여줍니다 ... 하지만 : :(

여기 login.php입니다 , 그렇지 않습니다.

을 그래서 난 내 세션을 가정 자동으로 파괴되었다? 그런데 왜?

감사합니다, 나는 당신의 도움을 주셔서 감사합니다.

내가 t 말을 잊지 모자 php.ini라고는 "0"

감사

답변

3

다음은 unset($_SESSION['login']) 많은 시간을 요구하고있다. 그것은 당신의 로그인을 제거합니다

<form method="post" action="<?php unset($_SESSION['login']) ?>"> 

이 시도 :

<form method="post" action="index.php"> 
<input type="button" name="logOut" value="LogOut" /> 
</form> 

<? if (isset($_REQUEST['logOut'])){ session_destroy(); } ?> 
+1

감사합니다 모두, 양식 작업
'form method = "post"action = " Ivan

+1

좋은 답변입니다. 답변 중 하나를 수락하고 원하는 답변을 수락해야합니다. . 이것은 사용자가 당신과 다른 사람을 도울 동기를 부여합니다;) – PiTheNumber

+0

더 많은 평판, 아직 먼 길 앞서 있기 때문에 나는 지금 upvote 수 없습니다.하지만 어쨌든 고마워요! – Ivan

0

당신은 if(isset($_SESSION['login'])) 확인하기 위해

session.cookie_lifetime

세트가 있습니다. 그 true 결과 경우 <form method="post" action="<?php unset($_SESSION['login']) ?>">

주에게 unset($_SESSION['login']) 부분을 - 그 후, if(isset($_SESSION['login']))false를 반환합니다.

0

세션 개요 :

<?php 
// Always Start our session 
session_start(); 

$_SESSION['username'] = 'Saurabh Singh'; 

$username = $_SESSION['username']; 

echo $username; 

if(isset($_SESSION['username'])) 
{ 
    Do your action 
} 
else 
{ 
    echo "Please Register or Login"; 

} 해제

1

세션

if(isset($_REQUEST['logOut'])) 
{ 
    unset($_SESSION['login']); 
} 
0

나는 세션이 파괴되었다고 생각하지 않는다! 먼저 PHP의 여는 태그와 session_start() 사이에있는 모든 빈 줄을 제거하는 것으로 시작합니다. 다시 테스트하고 행을 추가 할 수 있습니다. error_reporting (E_ALL); 아래의 session_start를 사용하여 오류 메시지가 다시 표시되는지 확인하십시오. PHP.ini에서 무엇 session.cookie_lifetime = 0 은 브라우저가 열려있는 한 세션이 활성 상태로 유지된다는 것을 의미합니다. 브라우저가 닫힐 때만 파괴됩니다. 이 도움이 되었기를 바랍니다.