2013-08-29 4 views
0

저는 PHP 전문가가 아니며, 제가 아는 모든 것들은 헛소리입니다. 어쨌든 나 혼자 할 수있는 최선을 다하려고 노력하지만 지금은 문제가있어 문제의 원인을 찾을 수 없습니다.로그 아웃 문제 (PHP)

this tutorial을 사용하여 볼트를 만들었습니다. 이 자습서는 훌륭하고 이해하기 쉽고 모든 것이 있지만 제어판/관리 시스템을 만드는 방법을 설명하지는 않습니다. 그래서 나 혼자서 만들었 어! 나는 블로그에 존재하는 기능들, 즉 "새로운 블로그 항목 추가", "기존 블로그 항목 편집", "카테고리 추가/관리"및 "로그 아웃"과 같은 아이콘을 가진 간단한 php/html5 파일을 만들었습니다. 로그인 메커니즘에 대해서는 this other tutorial을 사용했습니다. 한 가지를 제외하고는 모두 잘 작동합니다.

하나가 제어판에 로그인하고 기능 중 하나를 누르면 ("새 블로그 항목 추가"라고 말합니다) 버튼을 누르고 "컨트롤로 돌아 가기"를 누르십시오 패널 "을 선택하면 시스템이 자동으로 로그 아웃하고 강제로 다시 로그인합니다.

아무도 나에게 이유를 설명 할 수 있습니까?

제어판 : 내 컨트롤 패널과 컨트롤 패널에 포함 된 check.php의 코드가 우는 소리 (I 슬라이드 쇼, CSS 시트 등과 같은 다른 기능을 위해 불필요한 코드를 차단)

<?php require('autent/check.php'); ?> 
<p style="background:#48c248; line-height:30px; vertical-align:middle; color:#fff; font-weight:bold;">If you can see this, you're logged in</p> 
<!DOCTYPE html> 
<head> 
    <meta charset="utf-8" /> 

    <title></title> 

    <!-- Rich text editor --> 
    <script src="ckeditor/ckeditor.js"></script> 

</head> 
<body> 
    <div class="row"> 
    <div class="twelve columns"> 

     <h4>Useful links</h4> 
     <h5>Archive</h5> 
     <p> 

     <?php 
     mysql_connect ('localhost', 'dbuser', 'dbpass') ; 
     mysql_select_db ('tablename'); 

     $result = mysql_query("SELECT FROM_UNIXTIME(timestamp, '%Y') AS get_year, COUNT(*) AS entries FROM php_blog GROUP BY get_year"); 

     while ($row = mysql_fetch_array($result)) { 
      $get_year = $row['get_year']; 
      $entries = $row['entries']; 

      echo "<a href=\"archive.php?year=" . $get_year . "\">Entries from " . $get_year . "</a> (" . $entries . ")<br />"; 
     } 

     ?> 

     </p> 
     <h5>Category Archive</h5> 
     <p> 

     <?php 
     mysql_connect ('localhost', 'dbuser', 'dbpass') ; 
     mysql_select_db ('tablename'); 

     $result1 = mysql_query("SELECT * FROM php_blog_categories ORDER BY category_name ASC"); 

     while($row = mysql_fetch_array($result1)) { 

      $result2 = mysql_query("SELECT COUNT(`id`) AS entries FROM php_blog WHERE category = $row[category_id]"); 
      $num_entries = mysql_fetch_array($result2); 

      echo '<a href="kat_arkiv.php?category=' . $row['category_id'] . '">' . $row['category_name'] . '</a> (' . $num_entries['entries'] . ')<br />'; 

      } 
     ?> 

     </p> 
     </div> 
     <h4>Control panel - Manage your blog</h4> 
       <a href="skapa.php"><img src="../images/new_blog.png" title="Add a new blog entry" alt="Add a new blog entry"/></a><br> 
       <p><a href="skapa.php" title="Add a new blog entry">Add a new blog entry</a></p> 
      </div> 
      <div class="four columns"> 
       <a href="update_list.php"><img src="../images/edit_blog.png" title="Edit a blog entry" alt="Edit a blog entry"/></a><br> 
       <p><a href="update_list.php" title="Edit a blog entry">Edit an existing blog entry</a></p> 
      </div> 
      <div class="four columns"> 
       <a href="kategorier.php"><img src="../images/cat_blog.png" title="Add/manage categories" alt="Add/manage categories"/></a><br> 
       <p><a href="kategorier.php" title="Add/manage categories">Add/manage categories</a></p> 
      </div> 
      <div class="four columns"> 
       <p>&nbsp;</p> 
      </div> 
      </div> 
      <div class="four columns"> 
       <a href="logout.php"><img src="../images/logout.png" title="End your session" alt="End your session"/></a><br> 
       <p><a href="logout.php" title="End your session">End your session</a></p> 
      </div> 


<!-- other html and footer follows --> 

</body> 
</html> 

check.php

<?php 
session_start(); 
if (!isset($_SESSION['loggedin'])) { 
    header("Location: login.php"); 
    exit; 
} else { 
    // the session variable exists, let's check it's valid: 
    require('autent/config.php'); 
    $userexists = false; 

    foreach($users as $username => $password) { 
     if (md5($username.$password.$salt) == $_SESSION['loggedin']) 
      $userexists = true; 
    } 

    if ($userexists !== true) { 
     exit('<p style="background:#fd0000; line-height:30px; vertical-align:middle; color:#fff; font-weight:bold;">Invalid session: please <a href="login.php">login</a>.</p>'); 
    } 
} 
?> 

내가 나를 도울 수있는 사람에게 진정으로 감사드립니다!

+0

'autent/config.php' 파일을 추가 할 수 있습니까? – Sugar

+0

나는 C.Malet을 할 수 있지만 그 파일은 데이터베이스와의 연결 파일 일 뿐이다 ... – viriato

+0

세션을 만들고 파괴하는 부분은 흥미로울 수있다. 나는 config.php에서 완료된 것 같아 보이지 않는다. – Sugar

답변

0

세션 시간 초과로 인해 문제가 발생할 수 있습니다. 다음 URL을 참조하여 세션 시간을 늘리십시오.

How do I expire a PHP session after 30 minutes?

+0

그렇게 생각하지 마십시오. 브라우저를 다시 누르면 페이지가 새로 고쳐 지더라도 로그 아웃되지 않기 때문입니다. 그 말은 내 세션이 여기에서 쟁점이 아니라는 것을 의미합니다. 다른 문제가되고 있습니다 ...하지만 어쨌든 감사합니다! – viriato

0

세션 변수가 아닌 쿠키와 같은 사용자의 컴퓨터에서 서버에 저장됩니다. 따라서 사용자는 $ _SESSION 변수를 수정할 수 없습니다. 세션에 부울 변수를 만들어 사용자가 아직 로그인했는지 알려주는 빠른 플래그로 사용할 수 있습니다.

사용자 세션을 만들 때 다음과 같은 세션 변수를 만들 수 있습니다. 이 :

$_SESSION['valid'] = TRUE; 

여기에서 밖으로, 당신은 세션이 여전히 true로 설정되어 있는지 확인한다 할 일은 :이 경우

session_start(); 
if (!$_SESSION['valid']) { 
    header("Location: login.php"); 
    exit; 
} 

그 코드 검사를 세션이 사실이 아니다 경우 안되면 login.php로 보내주세요.

로그 아웃 할 때 세션 변수를 설정 해제하거나 false로 설정할 수 있습니다.