0

我不是 PHP 专家,我所知道的一切都来自 tuts。无论如何,我尝试自己做最好的事情,但现在我遇到了问题,找不到导致问题的原因。

我使用本教程制作了一个博尔格。该教程很棒,易于理解,一切都很好,唯一的但他们没有解释如何制作控制面板/管理系统。所以,我自己做了一个!我创建了一个简单的 php/html5 文件,其中包含博客中存在的功能的图标:“添加新博客条目”、“编辑现有博客条目”、“添加/管理类别”和“注销”。对于登录机制,我使用了这个其他教程。一切正常,除了一件事:

在登录控制面板并按下其中一项功能(比如说“添加新博客条目”)然后按下“返回控制面板”按钮后,系统会自动注销并强制您登录再次进入。

任何人都可以解释我为什么?Bellow 是我的控制面板的代码和包含在控制面板中的 check.php(我切断了其他功能的不必要代码,如幻灯片放映、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>

检查.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>');
    }
}
?>
4

2 回答 2

0

It may because of session timeout problem.try to increase the session time by referring the following url.

How do I expire a PHP session after 30 minutes?

于 2013-08-29T07:06:46.993 回答
0

会话变量存储在您的服务器上,而不是像 cookie 一样存储在用户计算机上。所以用户永远不能修改 $_SESSION 变量。在会话中创建一个布尔变量会很有帮助,该变量可用作快速标志来告诉您用户是否仍在登录。

当你为用户创建会话时,你可以像这样创建一个会话变量:

$_SESSION['valid'] = TRUE;

从现在开始,您所要做的就是检查会话是否仍设置为 true:

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

该代码检查会话是否为真,如果不是,则将它们发送到 login.php

当您将它们注销时,您可以取消设置会话变量或将其设置为 false。

于 2013-08-29T08:42:56.793 回答