主要的 PHP/MySQL 登录项目,带有会话变量

Posted

技术标签:

【中文标题】主要的 PHP/MySQL 登录项目,带有会话变量【英文标题】:Major PHP/MySQL Login Project, with session variables 【发布时间】:2014-07-19 12:28:37 【问题描述】:

好的,所以在过去的两天里,我一直在搜索互联网,并尽我所能组装一个相当复杂的登录系统。我有它的核心工作,用户可以注册和登录。我对简单的 phpmysql 并不陌生,但是当涉及到像这样的深入代码时,我迷路了。基本上我想要的是让用户输入他们的登录名,然后验证(显然)并且我已经完成了,然后被重定向到仅显示与其用户名/帐户有关的信息的成员页面。我已经在 checklogin.php 上注册了一些会话变量(我验证登录的文件,请看下面),但是对于我来说,我无法将变量传递给实际的成员页面。所以我想我会很容易开始。我只是尝试转移用户名并显示欢迎消息“您好,[用于登录此处的用户名]。我无法做到这一点。有人可以帮我吗?一旦我得到这个,我可以从那里开始。

登录表单(只是 sn-p):

<form class="form-signin" role="form" method="post" action="checklogin.php">
         <center><img src="logo.png" style="padding-bottom: 10px;"></center>
         <input type="text" name="myusername" id="myusername" class="form-control" placeholder="Email address"  required autofocus><br>
         <input type="password" name="mypassword" id="mypassword" class="form-control" placeholder="Password"  required>
         <br>
         <button class="btn btn-lg btn-primary btn-block" name="Submit" type="submit">Sign In</button>                  
         </form>

检查登录

<?php
            session_start();
            $host="localhost"; // Host name 
            $username="username"; // Mysql username 
            $password="********"; // Mysql password 
            $db_name="joinfbla_services"; // Database name 
            $tbl_name="members"; // Table name

            // Connect to server and select databse.
            mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
            mysql_select_db("$db_name")or die("cannot select DB");

            // Define $myusername and $mypassword 
            $myusername=$_POST['myusername']; 
            $mypassword=$_POST['mypassword']; 

            // To protect MySQL injection (more detail about MySQL injection)
            $myusername = stripslashes($myusername);
            $mypassword = stripslashes($mypassword);
            $myusername = mysql_real_escape_string($myusername);
            $mypassword = mysql_real_escape_string($mypassword);
            $sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
            $result=mysql_query($sql);

            // Mysql_num_row is counting table row
            $count=mysql_num_rows($result);

            // If result matched $myusername and $mypassword, table row must be 1 row
            if($count==1)

            // Register $myusername, $mypassword and redirect to file "login_success.php"
            $_SESSION['myusername'] = $_POST['myusername'];
            $_SESSION['mypassword'] = $_POST['mypassword'];
            echo '<META http-equiv="refresh" content="1;URL=http://joinfbla.com/2014/members/services.php">';
            

            else 
            echo "Wrong Username or Password";
            
        ?>

会员页面:

<div class="col-md-4">
            <div class="panel panel-primary">
              <div class="panel-heading">Hello, <?php session_start(); echo $_SESSION['user']?>!</div>
              <div class="panel-body">
                <u><b>BAA Username:</b></u> [Insert PHP/MySQL Here]
                <br>
                <u><b>BAA Password:</b></u> [Insert PHP/MySQL Here]
                <br>
                <u><b>Point's Recorded:</b></u> [Insert PHP/MySQL Here]
                <br>
                <div class="alert alert-warning">Note: Only seniors get points this year, if that field is blank do not fear.</div>
              </div>
            </div>
            <div class="panel panel-primary">
              <div class="panel-heading">This Month in FBLA!</div>
              <div class="panel-body">
                [insert gcalendar here]
              </div>
            </div>
          </div>

【问题讨论】:

如果您担心安全性,请选择 mysqli_* 或 PDO,因为 mysql_* 自 PHP 5.5 起已弃用 您已经设置了$_SESSION 变量。如果您想从任何脚本访问它们,您首先必须包含命令session_start(),然后只需引用变量,例如echo "The user is ". $_SESSION['myusername']; 您需要从数据库中提取数据并在网页中显示。你想要什么?做一些调查你会找到答案 rather sophisticated 和纯文本密码 + 没有参数化查询不太好相处 这不是一段复杂的代码,距离“复杂”还有很长的路要走。它充满了不安全感。你说它不起作用然后不要向我们展示问题所在的代码。你没有告诉我们为什么它不起作用。 【参考方案1】:

在您的会员页面中更改您的会话名称以匹配您的登录处理页面。你有“myuserame”,然后是“用户”。

【讨论】:

【参考方案2】:

我马上注意到了一件事,但可能无法完全解决问题:

echo $_SESSION['user']

应该是

echo $_SESSION['myusername']

【讨论】:

做到了,不敢相信我只是犯了那么小的错误。谢谢! 没问题!很高兴我能帮上忙。

以上是关于主要的 PHP/MySQL 登录项目,带有会话变量的主要内容,如果未能解决你的问题,请参考以下文章

如何通过创建会话使用 PHP、MYSQL 和 HTML 创建登录系统 [关闭]

如何将会话变量连接到 Django 中的登录用户?

VaryByCustom 不适用于会话变量

如何从不同的会话中获取 Windows 环境变量的当前值

这是对会话变量的安全使用吗?

来自 PHP/MySQL 的 Ajax 加载生成带有变量传递的 Bootstrap 下拉列表