【问题标题】:Using Session on PHP在 PHP 上使用会话
【发布时间】:2017-08-17 01:57:42
【问题描述】:

我是 PHP 编程新手,我有用于用户登录的代码,并且已经连接到 localhost 数据库。

这是Login.php代码

<html>
<head>
    <title>Login Page</title>
</head>
<body>
    <div>
        <form action="doLogin.php" method="POST">
            <p>
                <label>Username : </label>
                <input type="text" id="username" name="user">
            </p>
            <p>
                <label>Password : </label>
                <input type="text" id="password" name="pass">
            </p>
            <p>
                <input type="submit" id="btnLogin" value="Login">
            </p>
        </form>
    </div>
</body>
</html>

doLogin.php

<?php
    $username = $_POST["user"];
    $password = $_POST["pass"];

    $username = stripcslashes($username);
    $password = stripcslashes($password);

    $con = mysqli_connect('localhost', 'root', '', 'dbtest');

    $query = mysqli_query($con, "select * from user where Username = '$username' and Password = '$password' ");
    $row = mysqli_fetch_array($query);

    if ($row['Username'] == $username && $row['Password'] == $password)
    {
        echo "You are Success Login!!! Welcome ".$row['Username'];
        header('Location: Profile.php');
    }
    else
    {
        echo "Failed to login!";
    }
?>

我想使用session,所以如果用户没有登录,它将重定向到登录页面。我在哪里以及如何将会话应用到我的代码中,非常感谢。

【问题讨论】:

  • 在顶部。 session_start();
  • 你可以用谷歌搜索一下。也不要直接将输入中的数据发布到您的查询中。阅读更多关于 PHP 中的 Santizing 输入。另外,阅读更多关于在 PHP 中使用准备好的语句

标签: php session localhost


【解决方案1】:

在开始时使用 session_start(),当用户通过身份验证时,将用户名存储在会话变量中。

<?php
    session_start(); //starting the session
    $username = $_POST["user"];
    $password = $_POST["pass"];

    $username = stripcslashes($username);
    $password = stripcslashes($password);

    $con = mysqli_connect('localhost', 'root', '', 'dbtest');

    $query = mysqli_query($con, "select * from user where Username = '$username' and Password = '$password' ");
    $row = mysqli_fetch_array($query);

    if ($row['Username'] == $username && $row['Password'] == $password)
    {
        echo "You are Success Login!!! Welcome ".$row['Username'];
        $_SESSION['username'] = $username; //Storing username in global variable
        header('Location: Profile.php');
    }
    else
    {
        echo "Failed to login!";
    }
?>

【讨论】:

    【解决方案2】:

    首先,您需要调用session_start(),如果您不通过 index.php 或类似的方式包含部分页面,则需要在要使用会话的每个页面或每个文件中调用session_start()确保在文件顶部调用session_start();,紧随&lt;?php

    在您的 doLogin.php 中,您可以执行类似的操作

    if ($row['username'] == $username && $row['password'] == $password) {
        $_SESSION['username'] = $username;
        $_SESSION['login'] = true;
    }
    

    并在您要保护的每个页面的开头,检查会话是否设置为

    if (!$_SESSION['login'] === true) {
      die('You need to login');
    }
    

    非常简单的回答,但这是基本的想法。

    请考虑@PhpDev 的评论

    【讨论】:

    • 这段代码完美地防止了用户进入需要用户先登录的页面。但是当用户想要登录时,它会不断返回登录页面。我将此代码添加到我要保护的页面中&lt;?php if(!$_SESSION['login'] === TRUE) { header('Location: Login.php'); }?&gt;
    【解决方案3】:

    我进行了一些搜索并实现了这段代码。

    我创建session.php 文件,这里是代码

    <?php
        function checkSession()
        {
            if(!isset($_SESSION))
            {
                session_start();
            }
            $username=$_SESSION['Username'];
            if(empty($username))
            {
                return true;
            }
            return false;
        }
    ?>
    

    我将这段代码放置在我保护的每个页面上,以防止未经授权的用户访问。

    <?php
        require_once("session.php");
        if(checkSession())
        {
            header('Location: Login.php');
            exit;
        }
        else
        {
    ?>
            //User Logged in...
    <?php
        }
    ?>
    

    希望这可以帮助其他遇到同样问题的 PHP 编程新手。

    【讨论】:

      猜你喜欢
      • 2012-07-23
      • 2014-03-22
      • 2018-11-13
      • 2013-03-17
      • 1970-01-01
      • 2019-10-28
      • 2015-10-04
      • 1970-01-01
      • 2018-06-02
      相关资源
      最近更新 更多