如何使登录会话永远不会过期数据库?

时间:2018-02-13 09:37:05

标签: php mysql session session-variables

我看到很多关于使用cookie永远不会过期的教程和文档。但所有使用静态变量的教程都使逻辑变得如此不同。我的登录网站有3页:

  1. index.php(从此页面登录)
  2. proses.php(处理登录)
  3. home.php(登录后的页面)
  4. 我会在每一页解释我的问题。第一,在index.php中我想删除静态变量,因为我想使用带有mysqli的动态数据库。我怎么能这样做?

      <?php
        session_start();
    //static variable
        $user = 'vincy';
        $pass = md5('jokam354');
        //check session
        if(isset($_COOKIE['login']))
        {
           if ($_COOKIE['login'] == $user)
           {
              $_SESSION['login'] = TRUE;
    
              header('location: ./home.php');
              exit();
           }
        }
        ?>
        <!DOCTYPE html>
        <html>
           <head>
              <meta charset="utf-8">
              <title>Login Remember Me</title>
           </head>
           <body>
              <form action="proses.php" method="post">
                 <p><label for="username">Username :</label> <input type="text" name="username" /></p>
                 <p><label for="password">Password :</label> <input type="password" name="password" /></p>
                 <p><label for="remember"><input type="checkbox" name="remember" value="true" checked="checked" /> Remember Me</label></p>
                 <p>
                    <button type="submit" name="login">Login</button>
                    <button type="reset" name="reset">Reset</button>
                 </p>
              </form>
           </body>
        </html>
    

    proses.php

    <?php
    session_start();
    //static variable
    if (empty($_POST['username'])) {
            echo 'enter username';
        } else {
            $username = $_POST['username'];
        }
    if (empty($_POST['password'])) {
            echo 'enter password';
        } else {
            $password = md5($_POST['password']);
        }
    //check login
    $conn = mysqli_connect("localhost", "root", "", "reme");
       $sql = "Select * from members where member_name = '" . $username . "' and member_password = '" . $password . "'";
       $result = mysqli_query($conn,$sql);
    
    if(@mysqli_num_rows($result) == 1)
    {
       //set session
       $_SESSION = mysqli_fetch_array($result);
       $_SESSION['login'] = TRUE;
    
       //check remember me
       if (isset($_POST['remember']))
       {
          $time = time();
          //set cookie
          setcookie('login', $username, $time + 3600);
       }
       //redirect to home page
       header('location:./home.php');
       exit();
    } else {
       header('location:./index.php');
    }
    ?>
    
    $_SESSION = mysqli_fetch_array($result);中的

    语法proses.php无效,我关闭浏览器后得到Undefined index: member_email in C:\xampp\htdocs\remember5c\home.php on line 17

    home.php

    <?php
    session_start();
    //check session
    if (!isset($_SESSION['login']))
    {
       header('location:./index.php');
    }
    ?>
    <!DOCTYPE html>
    <html>
       <head>
          <meta charset="utf-8">
          <title>Home Remember Me</title>
       </head>
       <body>
          <h5>Welcome, your email is <?php echo $_SESSION['member_email'];?></h5>
          <p><a href="./logout.php">Logout</a></p>
       </body>
    </html>
    

    这是表格: table 感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

这主要是评论......

“记住我”功能与长期持续会话非常不同。后者有various security implications

您没有使用不安全的密码哈希值。您的代码易受SQL注入攻击。

你没有告诉我们哪一行是17(尽管我们可以猜到)。你没告诉我们表的结构是什么(它有一个member_email属性)。您没有在代码中添加任何诊断,以确定是否是会话或数据库是问题。

您正在尝试在输出正文后设置标题。